InvalidCastException para objeto do mesmo tipo - carga de controle personalizada

Eu tenho um erro muito com fio, um dos meus controles personalizados parece que é criar dois arquivos compilados, e quando eu tento carregá-lo dinamicamente comLoadControl() é apenas falhar porque não pode lançar um para o outro - mesmo que sejam exatamente os mesmos. Eu escrevo a mensagem para ver que tudo é o mesmo, é só mudar a dll compilada.

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'.
O código

Este é o código como é agora, depois de eu ter seguidoexatamente o que está escrito no 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
}

Anteriormente eu tenho Load o controle sem oASP. mas depois que esse bug aparece e procurando por solução, eu segui estritamente o que está no MSDN. O bug ainda está aqui, não importa o que eu faça.

Eu também tentei ambos os métodos, cada um sozinho e juntos (novamente falham)

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

Meu web.config, eu tenho tentado commaxBatchSize 20, 100, 1000, também comoptimizeCompilations verdadeiro ou falso, mas o erro é exibido novamente.

<compilation debug="false" defaultLanguage="C#" batch="true"
maxBatchSize="800" batchTimeout="10800" optimizeCompilations="false"
targetFramework="4.0">
Agora alguns detalhes sobreO erro é aleatório, em algumas compilações aparece, em algum outro não.O projeto é grande, as páginas são ao vivo com muitas pessoas em cada minuto que pedem para ver alguma coisa, mas também aparece quando não há ninguém dentro.É executado em 64 bits dot.net 4, IntergratedExecutar como web garden, mas também testado e um pool sozinho (e obter o mesmo problema)A sessão está desativada no projeto completo.As páginas são executadas a partir de 2007, mas esta questão é exibida no mês passado, infelizmente não consigo encontrar onde e como é iniciado, ou o que é desencadear porque eu tardio alguns dias para vê-lo.Aparece apenas uma carga de controle personalizado, aquela que tem chamada pesada.Eu mudei 4 vezes o código fazendo pequenas alterações, ou grandes mudanças e ainda está lá.Eu tenho tentadooptimizeCompilations verdadeiro e falso e o mesmo problema.Eu tentei também parando a web, deletei todos os arquivos temporários, reabrindo e lá estava novamente.Eu tentei colocar um mutex em global.asax quando o aplicativo começa a bloquear apenas uma compilação no momento, mas isso também falha.A partir do momento que funciona, então tudo é bom, mas se não funciona não é corrigido automaticamente.O código que eu carrego esse controle personalizado é existir e chamado em mais de um lugares no código, em diferentes páginas.Outros controles personalizados, com carga semelhante, não tiveram problemas.O ViewState está desativado para este controle personalizado.Eu também tentei realocar algum código, mudar a chamada de função completa com micro otimizações, não mais falhar.Está bem no computador de desenvolvimento. eu colocobatch="true" no web.config e o bug aparece imediatamente.Não há outros problemas como esse, como um bug que não podemos corrigir, não importa o quê. O sistema é executado durante dias, a piscina NÃO é reciclável, a memória é estável e há mais liberdade para usar. O programa é executado há anos, mas nós mudamos quase todos os dias com atualizações.Sob o mesmo código principal corre mais de um sites (algo como stackexchange) e todos têm o mesmo problema aleatório.O AutoEventWireup é falsoSua aparece e em outro controle personalizado que eu carrego da mesma maneira.

O que eu faço agora como solução alternativa quando esse bug aparece: Eu apenas forço o projeto a recompilar com uma pequena alteração, e o erro desaparece, até a próxima atualização.

Eu tenho um bug que tenta resolver as últimas semanas da árvore sem encontrar o motivo. Eu tentei quase tudo que eu posso imaginar, mas tudo falha, e o bug aparece novamente. Então eu postei aqui talvez alguns possam me ajudar e encontrar uma maneira de sair disso.

Última palavra: Este bug é louco, o controle personalizado é o mesmo, eu faço qualquer coisa nele Eu só carrego dinamicamente e boom, o compilador é ter duas vezes diferentes por algum motivo que só ele sabe - aleatoriamente.

Atualização 1

Eu consegui reproduzir o bug na máquina do desenvolvedor. Lá eu descobri que os dois módulos DLL que contém este controle personalizado têm um diferente.

Um deles era um conjunto de 4 controles personalizados juntos. O outro módulo foi o controle personalizado sozinho.

Solução alternativa

Depois de semanas de árvore tentando consertar esse bug, acabo aparecendo que esse erro aparece quando o compilador faz a compilação em lote de um diretório e agrupa muitos controles personalizados diferentes, na mesma dll. Então, quando eu tento carregá-lo sozinho é lançar essa exceção.

Então eu movo o controle personalizado problemático em um diretório diferente e parece que evito por enquanto.

Atualização 2

Aparece novamente, mesmo depois de eu mover alguns arquivos para um diretório diferente. É aleatório e não consegue encontrar uma conexão clara com o que é acionado.

Atualização 3

Porque nós temos spot que a questão principal aqui é a compilação em lote (batch="true") que compila na mesma dll muitos controles personalizados, uma maneira de dizer ao compilador para não fazer isso, é omaxBatchGeneratedFileSize parâmetro. Eu uso-o com um valor de 100, e o problema aparece novamente, agora eu diminuí-lo para 40 e testá-lo.

maxBatchGeneratedFileSize="40"

questionAnswers(5)

yourAnswerToTheQuestion