InvalidCastException dla obiektu tego samego typu - niestandardowe obciążenie kontrolne

Mam bardzo okablowany błąd, wydaje się, że jedno z moich niestandardowych elementów sterujących tworzy dwa skompilowane pliki i gdy próbuję załadować je dynamicznie za pomocąLoadControl() jest po prostu nieudany, ponieważ nie może rzucić jednego na drugiego - nawet jeśli są dokładnie takie same. Piszę wiadomość, aby zobaczyć, że wszystko jest takie samo, tylko zmienić skompilowaną bibliotekę DLL.

System.Web.HttpUnhandledException (0x80004005):     
 Exception of type 'System.Web.HttpUnhandledException' was thrown. --->             
    System.InvalidCastException:
[A]ASP.Modules_OneProduct_MedioumImage cannot be cast to
[B]ASP.Modules_OneProduct_MedioumImage.         

   Type A originates from 'App_Web_kg4bazz1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
in the context 'Default'
    at location 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\80ed7513\10eb08d9\App_Web_kg4bazz1.dll'.          

   Type B originates from 'App_Web_oneproduct_mediumimage.ascx.d1003923.4xoxco7b, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' 
in the context 'Default'    
    at location 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\80ed7513\10eb08d9\App_Web_oneproduct_mediumimage.ascx.d1003923.4xoxco7b.dll'.
Kod

To jest taki kod, jaki jest teraz po tym, jak go śledzędokładnie to, co jest napisane w MSDN:

foreach (int OneProductID in TheProductIdArrays)
{
    // here is the throw.
    ASP.Modules_OneProduct_MedioumImage OneProduct = 
        (ASP.Modules_OneProduct_MedioumImage)LoadControl(@"~/mod/OneProduct_MediumImage.ascx");

    // do some work with 
    //OneProduct
}

Wcześniej załadowałem kontrolę bezASP. ale po pojawieniu się tego błędu i szukaniu rozwiązania, ściśle przestrzegam tego, co jest w MSDN. Błąd jest nadal tutaj, niezależnie od tego, co zrobię.

Wypróbowałem również obie te metody, każdą pojedynczo i razem (znów nie)

<%@ Register src="~/mod/OneProduct_MediumImage.ascx" tagname="OneProduct_MediumImage" tagprefix="uc1" %>
<%@ Reference Control="~/mod/OneProduct_MediumImage.ascx" %>
Konfig

Mój web.config, z którym próbowałemmaxBatchSize 20, 100, 1000, także zoptimizeCompilations prawda lub fałsz, ale błąd pojawia się ponownie.

<compilation debug="false" defaultLanguage="C#" batch="true"
maxBatchSize="800" batchTimeout="10800" optimizeCompilations="false"
targetFramework="4.0">
Teraz kilka szczegółów na tematBłąd jest przypadkowy, w niektórych pojawia się kompilacja, w innych nie.Projekt jest duży, strony są na żywo z wieloma ludźmi w każdej minucie, które proszą o zobaczenie czegoś, ale pojawiają się również, gdy nikogo nie ma w środku.Jest uruchamiany na 64-bitowym dot.net 4, zintegrowanymUruchom jako ogród sieciowy, ale także testowany i jedna pula sama (i otrzymaj ten sam problem)Sesja jest wyłączona w pełnym projekcie.Strony są uruchamiane od 2007 roku, ale ten problem pojawia się w zeszłym miesiącu, niestety nie mogę znaleźć gdzie i jak się uruchamia, ani co go uruchamia, ponieważ spóźniam się kilka dni, aby go zobaczyć.Pojawia się tylko jeden niestandardowy ładunek kontrolny, który ma ciężkie połączenia.Zmieniłem 4 razy kod, wprowadzając małe zmiany lub duże zmiany i wciąż tam.Próbowałem zoptimizeCompilations prawda i fałsz oraz ten sam problem.Próbowałem także zatrzymać sieć, usunąć wszystkie pliki tymczasowe, otworzyć ponownie i ponownie.Próbowałem umieścić mutex na global.asax, gdy aplikacja zaczyna blokować tylko jedną kompilację w tym czasie, ale to również nie powiedzie się.Od momentu, w którym działa, wszystko jest dobre, ale jeśli nie działa, nie jest automatycznie korygowane.Kod, który ładuję ten niestandardowy formant, istnieje i jest wywoływany w więcej niż jednym miejscu kodu, na różnych stronach.Inne niestandardowe kontrolki o podobnym obciążeniu nie miały żadnych problemów.ViewState jest wyłączony dla tego niestandardowego formantu.Próbuję też przenieść jakiś kod, zmienić pełne wywołanie funkcji za pomocą mikrooptymalizacji, nigdy więcej nie zawiodę.Działa dobrze na komputerze programistycznym. Ja kładębatch="true" na web.config, a błąd pojawia się od razu.Nie ma innych takich problemów, jak błąd, którego nie możemy naprawić bez względu na wszystko. System działa przez kilka dni, pula NIE jest w ogóle przetwarzana, pamięć jest stabilna, a korzystanie z niej jest bardziej bezpłatne. Program działa już od lat, ale zmieniamy się prawie codziennie z aktualizacjami.W ramach tego samego kodu podstawowego działa więcej niż jedna witryna (coś takiego jak stackexchange) i wszystkie mają ten sam losowy problem.AutoEventWireup jest fałszywePojawia się i na innej niestandardowej kontroli ładuję w ten sam sposób.

Co robię teraz jako obejście, gdy pojawia się ten błąd: po prostu wymuszam rekompilację projektu z małą zmianą, a błąd zniknie, aż do następnej aktualizacji.

Mam błąd, który próbuje rozwiązać ostatnie tygodnie drzewa bez znalezienia przyczyny. Próbowałem prawie wszystkiego, co mogę, ale wszystkie zawiodły, a błąd pojawia się ponownie. Więc zamieszczam tutaj może niektórzy mogą mi pomóc i znaleźć wyjście z tego.

Ostatnie słowo: ten błąd jest szalony, kontrola niestandardowa jest taka sama, robię na niej wszystko, ładuję ją tylko dynamicznie i boom, kompilator ma dwa różne czasy z jakiegoś powodu, który tylko on wie - losowo.

Aktualizacja 1

Udało mi się odtworzyć błąd na komputerze programisty. Tam odkryłem, że dwa moduły dll, które zawierają tę kontrolę niestandardową, mają inne.

Jeden był pakietem 4 kontrolek niestandardowych razem. Drugim modułem była sama kontrola niestandardowa.

Obejście problemu

Po kilku tygodniach próby naprawienia tego błędu kończę, że ten błąd pojawia się, gdy kompilator tworzy kompilację wsadową katalogu i pakuje wiele różnych niestandardowych kontrolek w tej samej dll. Więc gdy próbuję załadować go sam, wyrzucam ten wyjątek.

Dlatego przenoszę problematyczną kontrolę niestandardową w innym katalogu i wydaje mi się, że na razie go unikam.

Aktualizacja 2

Pojawia się ponownie, nawet po przeniesieniu niektórych plików do innego katalogu. Jest losowy i nie może znaleźć jasnego związku z tym, co jest wyzwalane.

Aktualizacja 3

Ponieważ wiemy, że głównym problemem jest kompilacja wsadowa (batch="true"), który kompiluje na tej samej dll wiele niestandardowych formantów, jednym ze sposobów powiedzenia kompilatorowi, aby tego NIE robić, jestmaxBatchGeneratedFileSize parametr. Używam go z wartością 100, a problem pojawia się ponownie, teraz obniżyłem go do 40 i przetestuję.

maxBatchGeneratedFileSize="40"

questionAnswers(5)

yourAnswerToTheQuestion