2008-11-12 11 views
28

El tipo 'x' se define en un ensamblaje al que no se hace referencia. Debe agregar una referencia al ensamblado 'abc123'.Error extraño - CS0012: El tipo x se define en un ensamblaje que no está referenciado

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

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

En conjunto la propiedad del control de usuario, Ato la lista de tipo x a una vista de cuadrícula en el control del 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 implemente. 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.

Respuesta

27

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

El tipo X se define en su conjunto, es decir, solo en el GAC. Aunque su aplicación web ASP.NET sí tenía una referencia, no cargaba desde el GAC solo para este UserControl. El resto de la aplicación funcionó como se esperaba. Confirmamos la carga fallida colocando una copia del ensamblaje en el directorio bin, y todo funcionó. Quitamos la asamblea, y el problema regresó.

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

Parece que cada vez que hace referencia a un tipo en la página (no el código subyacente), necesita la información de conjunto definida en el archivo web.config o en una directiva de página.

<assemblies> 
     <add assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/> 
</assemblies> 
3

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

La solución alternativa es eliminar todo en el directorio C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporal ASP.NET Files \, y parece que solo se manifiesta en modo de depuración.

+1

El enlace está roto. –

0

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

Resolví el problema haciendo ese constructor interno.

0

La mayoría de las veces, es debido a los ensamblajes en caché. Una manera de resolver este problema es haciendo una "referencia fuerte" en el archivo de configuración o proyecto. Consulte este blog post

1

He descubierto que si type x es en realidad una clase en su App_Code, ensuciando y volver a guardar a menudo obliga a la aplicación web que recompilar y soluciona el problema.

Cuestiones relacionadas