InvalidCastException para objetos del mismo tipo - Carga de control personalizada

Tengo un error muy generalizado, uno de mis controles personalizados parece ser crear dos archivos compilados, y cuando intento cargarlo dinámicamente conLoadControl() es simplemente un error porque no se puede lanzar el uno al otro, incluso si son exactamente iguales. Escribo el mensaje para ver que todo es lo mismo, solo cambia la 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'.
El código

Este es el código tal como está ahora, después de haber seguidoexactamente lo que está escrito en 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 tengo Cargar el control sin elASP. pero después de que aparece este error y busco una solución, sigo estrictamente lo que está en MSDN. El error sigue aquí, no importa lo que haga.

También he probado estos dos métodos, cada uno solo, y juntos (nuevamente fallan)

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

Mi web.config, lo he intentado conmaxBatchSize 20, 100, 1000, también conoptimizeCompilations Verdadero o falso, pero el error aparece nuevamente.

<compilation debug="false" defaultLanguage="C#" batch="true"
maxBatchSize="800" batchTimeout="10800" optimizeCompilations="false"
targetFramework="4.0">
Ahora algunos detalles sobreEl error es aleatorio, en algunas compilaciones aparece, en otras no.El proyecto es grande, las páginas son en vivo con muchas personas en cada minuto que piden ver algo, pero también aparecen cuando no hay nadie dentro.Se ejecuta en 64bit dot.net 4, integradoEjecutar como web garden pero también probado y solo un pool (y obtener el mismo problema)La sesión está apagada en el proyecto completo.Las páginas se ejecutan a partir de 2007, pero este problema aparece el último mes, desafortunadamente no puedo encontrar dónde y cómo se inició, o qué se desencadena porque tardé algunos días en verlo.Aparece solo una carga de control personalizada, la que tiene llamada pesada.He cambiado 4 veces el código haciendo pequeños cambios, o grandes cambios y todavía estoy allí.He intentado conoptimizeCompilations Verdadero y falso y el mismo problema.También he intentado detener la web, eliminar todos los archivos temporales, volver a abrir, y había otra vez.Intenté colocar un mutex en global.asax cuando la aplicación comienza a bloquear solo una compilación en ese momento, pero esto también falla.Desde el momento en que funciona, entonces todo está bien, pero si no funciona, no se corrige automáticamente.El código que carga este control personalizado existe y se llama en más de un lugar en el código, en diferentes páginas.Otros controles personalizados, con carga similar no tuvieron ningún problema.ViewState está deshabilitado para este control personalizado.También he intentado reubicar algo de código, cambiar la llamada de función completa con micro optimizaciones, no volver a fallar.Es un trabajo bien en la computadora de desarrollo. Colocobatch="true" en web.config y el error aparece de inmediato.No hay otros problemas como ese, como un error que no podemos solucionar sin importar qué. El sistema se ejecuta durante días, la agrupación NO se recicla en absoluto, la memoria es estable y hay más uso gratuito. El programa se ejecuta desde hace años, pero cambiamos casi todos los días con actualizaciones.Bajo el mismo código central se ejecutan más de un sitio (algo como stackexchange) y todos tienen el mismo problema aleatorio.El AutoEventWireup es falsoSu aparece y en otro control personalizado que carga de la misma manera.

Lo que hago ahora como solución alternativa cuando aparece este error: simplemente obligo al proyecto a volver a compilar con un pequeño cambio, y el error desaparece, hasta la próxima actualización.

Tengo un error que intenta resolver las últimas semanas del árbol sin encontrar la razón. He intentado casi cualquier cosa que pueda hacer, pero todo falla, y el error aparece de nuevo. Así que publico aquí, quizás algunos puedan ayudarme y encontrar una manera de salir de esto.

Última palabra: este error es una locura, el control personalizado es el mismo, hago cualquier cosa en él, solo lo carga dinámicamente y boom, el compilador lo tiene dos veces diferentes por alguna razón que solo él sabe, al azar.

Actualización 1

He podido reproducir el error en la máquina del desarrollador. Allí descubro que los dos módulos dll que contienen este control personalizado tienen una diferente.

El uno era un paquete de 4 controles personalizados juntos. El otro módulo fue el control personalizado solo.

Solución

Después de semanas de árbol tratando de solucionar este error, termino que este error aparece cuando el compilador hace la compilación por lotes de un directorio y agrupa muchos controles personalizados diferentes, en la misma dll. Así que cuando intento cargarlo solo es lanzar esta excepción.

Así que muevo el control personalizado problemático solo en un directorio diferente y parece que por ahora lo evito.

Actualización 2

Aparece de nuevo, incluso después de mover algunos archivos a un directorio diferente. Es aleatorio y no puede encontrar una conexión clara con lo que desencadena su.

Actualización 3

Porque hemos descubierto que el problema principal aquí es la compilación por lotes (batch="true") que compila en la misma dll muchos controles personalizados, una manera de decirle al compilador que NO haga eso, es lamaxBatchGeneratedFileSize parámetro. Lo uso con un valor de 100, y el problema aparece nuevamente, ahora lo he bajado a 40 y lo pruebo.

maxBatchGeneratedFileSize="40"

Respuestas a la pregunta(5)

Su respuesta a la pregunta