Error extraño-CS0012: El tipo x se define en un ensamblado al que no se hace referencia


El tipo 'x' se define en un ensamblado al que no se hace referencia. Debe agregar una referencia al ensamblado 'abc123'.

Tengo una aplicación web.NET 2.0 que hace referencia a mi ensamblado 'abc123'. El ensamblaje existe en el GAC y he verificado que es la versión correcta(la misma). El resto de la aplicación no tiene problemas excepto uno .aspx page. La página en cuestión tiene un repetidor que muestra un control de usuario como uno de sus"campos". Al vincular una lista de tipo y al repetidor I pase al control de usuario una lista de tipo x (una propiedad de y) como se muestra aquí:

<uc1:usercontrol id="ucusercontrol " runat="server" myPublicUserControlProperty='<%#Eval("CollectionOfX") %>'/>

En el conjunto de propiedades del control de usuario, enlazo la lista de tipo x a un gridview en el control de usuario.

Una cosa extraña a tener en cuenta es que este informe funciona bien en mi pc de desarrollo, pero no en ningún servidor una vez que despliegue. Mi pc es Windows XP, IIS6, VS2005. Los servidores son Windows Server 2003, IIS6.

Espero haber explicado eso lo suficientemente bien. Gracias de antemano por cualquier información que pueda proporcionar.

Author: Dave Clemmer, 2008-11-12

7 answers

Soy el compañero de trabajo de Mike, y hemos encontrado una solución.

El tipo X se define en su ensamblaje, es decir, solo en el GAC. A pesar de que su ASP.NET la aplicación web tenía una referencia, no se podía cargar desde el GAC solo para este control de usuario. El resto de la aplicación funcionó como se esperaba. Confirmamos la carga fallida colocando una copia del ensamblado en el directorio bin, y todo funcionó. Retiramos la asamblea, y el problema volvió.

Nuestra solución fue para agregar manualmente una entrada a la web.config en la sección ensamblajes para apuntar ASP.NET al GAC.

Parece que cada vez que hace referencia a un tipo en la página (no al código detrás), necesita la información del ensamblado definida en la web.archivo de configuración o en una directiva de página.

<assemblies>
        <add assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/>   
</assemblies>
 28
Author: Aaron Daniels,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-12 19:32:54

También hay un error que puede manifestarse con síntomas similares, descrito aquí.

La solución es eliminar todo en el C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files \ directory, y solo parece manifestarse en modo de depuración.

 4
Author: Tom Lianza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-02 12:15:30

Al solucionar este tipo de problemas, el Visor de registros de fusión siempre ha sido de gran ayuda.

 3
Author: Maxam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-12 16:27:16

Encontré que si type x es realmente una clase en su App_Code, ensuciarla y volver a guardarla a menudo obliga a la aplicación web a recompilar y resuelve el problema.

 1
Author: Charbarred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-30 00:58:02

La mayoría de las veces, es debido a los ensamblados almacenados en caché. Una forma de resolver este problema es haciendo la "referencia fuerte" en el archivo proj o config. Consulte este blog post

 0
Author: Lav G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-07 13:47:50

Tuve exactamente el mismo error, pero tenía un constructor public en mi clase que usaba como parámetro, un objeto de otro proyecto.

Resolví el problema haciendo que el constructor interno.

 0
Author: Dan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-29 12:58:52

Para mí fue un problema de extracción de control de versiones.

En Visual studio, abra "Referencias" en el explorador de soluciones y desplácese por él.

Si algo tiene un triángulo de advertencia amarillo, recuerde el nombre, elimínelo y agréguelo de nuevo (o haga que ReSharper lo haga por usted).

Me sucedió varias veces después de tirar de un proyecto cuando un compañero de trabajo agregó un nuevo paquete y referencias.

 0
Author: Max Izrin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-07 00:14:12