El tipo se define en un ensamblado al que no se hace referencia, ¿cómo encontrar la causa?


Sé que el mensaje de error es común y hay muchas preguntas sobre este error, pero ninguna solución me ha ayudado hasta ahora, así que decidí hacer la pregunta. La diferencia con la mayoría de las preguntas similares es que yo uso el directorio App_Code.

Mensaje de error:

CS0012: The type 'Project.Rights.OperationsProvider' is defined in an
assembly that is not referenced. You must add a reference to assembly
'Project.Rights, version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

Archivo fuente:

c:\inetpub\wwwroot\Test\Website\App_Code\Company\Project\BusinessLogic\Manager.cs

Siguiendo las sugerencias aquí y aquí, he eliminado todas las instancias de Project.Derecho.dll dentro C:\Windows\Microsoft.NET/*.* De acuerdo con esto , lo comprobé .los archivos cs en cuestión tienen la acción de compilación establecida en"Compilar". Lo hacen. También he comprobado que el .archivo cs que contiene el " Proyecto.Derecho.El tipo "OperationsProvider" se implementa en el directorio App_Code.

Por alguna razón, la aplicación no está buscando el tipo en el directorio App_Code. Desde que he eliminado todas las instancias del Proyecto.Derecho.dll (que yo sepa), no se que ensamblado está mencionando el mensaje de error.

Author: Micha Wiedenmann, 2013-12-18

16 answers

Cuando obtienes este error no siempre es obvio lo que está pasando, pero como dice el error, te falta una referencia. Tome la siguiente línea de código como ejemplo:

MyObjectType a = new MyObjectType("parameter");

Parece bastante simple y probablemente haya hecho referencia a "MyObjectType" correctamente. Pero digamos que una de las sobrecargas para el constructor" MyObjectType " toma un tipo al que no has hecho referencia. Por ejemplo, hay una sobrecarga definida como:

public MyObjectType(TypeFromOtherAssembly parameter) {
    // ... normal constructor code ...
}

Ese es al menos un caso en el que obtendrá este error. Por lo tanto, busque este tipo de patrón donde se ha hecho referencia al tipo, pero no todos los tipos de las propiedades o parámetros de método que son posibles para las funciones que se llaman en ese tipo.

¡Esperemos que esto al menos te lleve en la dirección correcta!

 71
Author: drew_w,
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
2013-12-18 14:44:34

Compruebe target framework en los proyectos.

En mi caso, "Debe agregar una referencia al ensamblado" en realidad significaba que los proyectos de referencia y de llamada no tenían el mismo marco de destino. El proyecto de llamada tenía. Net 4.5, pero la biblioteca referenciada tenía target 4.6.1.

Estoy seguro de que MS compiler puede ser más inteligente y registrar mensajes de error más significativos. He añadido una sugerencia a https://github.com/dotnet/roslyn/issues/14756

 30
Author: Michael Freidgeim,
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
2016-10-26 21:47:18

En mi caso, esto se debió a que hacer una actualización del paquete NuGet solo había actualizado las referencias a una dependencia dll en algunos pero no todos los proyectos en mi solución, lo que resultó en versiones conflictivas. Usando una herramienta de estilo grep para buscar texto dentro de *.archivos csproj en mi solución fue fácil ver los proyectos que aún necesitaban ser actualizados.

 12
Author: rogersillito,
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
2015-12-08 11:17:24

Cuando obtiene este error, significa que el código que está utilizando hace una referencia a un tipo que está en un ensamblado, pero el ensamblado no es parte de su proyecto, por lo que no puede usarlo.

Borrando proyecto.Derecho.dll es lo contrario de lo que quieres. Debe asegurarse de que su proyecto pueda hacer referencia al ensamblaje. Por lo tanto, debe colocarse en la Caché de Ensamblaje Global o en el directorio ~/Bin de su aplicación web.

Editar-Si no desea utilizar el ensamblado, entonces eliminarlo no es la solución adecuada tampoco. En su lugar, debe eliminar todas las referencias a él en su código. Dado que el ensamblado no es directamente necesario por el código que ha escrito, sino por algo más que está haciendo referencia, tendrá que reemplazar ese ensamblado referenciado con algo que no tiene Proyecto.Derecho.dll como dependencia.

 7
Author: mason,
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
2014-02-03 15:36:53

Simplemente me ocurrió que diferentes proyectos hacían referencia a diferentes copias de la misma dll. Me aseguré de que todos hicieran referencia al mismo archivo en el disco, y el error desapareció como esperaba.

 2
Author: Gonzalo Méndez,
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
2016-03-29 14:52:33

En mi caso, estaba haciendo referencia a una biblioteca que se estaba construyendo con la Plataforma/Configuración incorrecta (acababa de crear la biblioteca referenciada).

Además, no pude solucionar el problema en Visual Studio Configuration Manager unable incapaz de cambiar y crear nuevas Plataformas y Configuraciones para esta biblioteca. Lo arreglé corrigiendo las entradas en la sección ProjectConfigurationPlatforms del archivo .sln para ese proyecto. Todas sus permutaciones se establecieron en Debug|Any CPU (no estoy seguro de cómo lo hice). Me sobrescribió las entradas para el proyecto roto con las de un proyecto en funcionamiento y cambió el GUID para cada entrada.

Entradas para el proyecto en funcionamiento

{9E93345C-7A51-4E9A-ACB0-DAAB8F1A1267}.Release|x64.ActiveCfg = Release|x64 {9E93345C-7A51-4E9A-ACB0-DAAB8F1A1267}.Release|x64.Build.0 = Release|x64

Entradas para proyecto corrupto

{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.ActiveCfg = Debug|Any CPU {94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.Build.0 = Debug|Any CPU

Entradas corruptas ahora arregladas

{94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.ActiveCfg = Release|x64 {94562215-903C-47F3-BF64-8B90EF43FD27}.Release|x64.Build.0 = Release|x64

Espero que esto ayude a alguien.

 2
Author: Joseph,
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-01-08 21:06:09

Una de las razones principales puede ser la propiedad de DLL usted debe antes de hacer cualquier cosa para comprobar el specific version property si es verdadero, hágalo falso

Razón: tal vez el código fuente se unió con otra versión (antigua)cuando se construye, pero esta biblioteca actualizada con nueva actualización de la versión ahora diferente en el Efectivo de Montaje y su aplicación prohibida para obtener nueva DLL, y después de desactivar specific version property su applacaten será libre para obtener la nueva versión de DLL references

 0
Author: Mohammed Rashed Ali,
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
2014-04-08 15:14:32

Tal vez una biblioteca (archivo DLL) que esté utilizando requiera otra biblioteca. En mi caso, hice referencia a una biblioteca que contenía un modelo de entidad de base de datos, pero olvidé hacer referencia a la biblioteca entity framework.

 0
Author: Graham Laight,
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
2014-10-15 14:28:13

Esto también puede significar que use una biblioteca, que expone tipos (públicos) definidos en una biblioteca. Incluso cuando no los usa específicamente en su biblioteca (la que no construye).

Lo que esto probablemente evita es que escribas código que usa una clase (que en su firma tiene los tipos de una biblioteca no referenciados) que no puedes usar.

 0
Author: cr4ne,
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
2015-12-14 11:08:52

Para mí, la razón por la que apareció el error fue que el formulario web donde se informó del error se ha movido de otra carpeta, pero el nombre de su clase de archivo de código se mantuvo sin cambios y no se correspondía con la ruta real.

Estado inicial:
Ruta del archivo original: /Folder1/Subfolder1/MyWebForm.aspx.cs
Nombre de la clase del archivo de código original: Folder1_Subfolder1_MyWebForm

Después de mover el archivo:
Ruta del archivo: / Folder1 / MyWebForm.aspx.cs
Nombre de la clase del archivo de código (sin cambios, con el error mostrado): Folder1_Subfolder1_MyWebForm

La solución:
cambiar el nombre de su codefile clase Folder1_Subfolder1_MyWebForm
a una correspondiente con el nuevo camino: Folder1_MyWebForm

Todo a la vez - problema resuelto, sin informes de errores..

 0
Author: Vladimír Hála,
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
2016-06-30 10:15:56

El tipo ' Dominio.tblUser ' se define en un ensamblado que no es referenciado. Debe agregar una referencia al Dominio de assembly, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'.

**Solved:**
 Add reference of my domain library layer to my web app libary layer

Nota: Asegúrese de que sus referencias sean correctas de acuerdo con su contenedor

 0
Author: Asif Raza,
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
2017-04-30 04:40:19

En mi caso esto fue porque usé

Operador implícito

Entre las clases BLL y DAL.cuando quiero usar la Capa BLL En la Capa de aplicación obtuve este error. He cambiado

Operador implícito

A

Operador explícito

Está bien. Gracias

 0
Author: Amirhossein Yari,
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
2017-05-03 17:51:50

En mi caso, la versión de la dll referenciada era en realidad más nueva que la que tenía antes.

Solo necesitaba volver a la versión anterior y eso lo arregló.

 0
Author: Hugo Nava Kopp,
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-02-07 16:31:14

Para mí, esto fue causado por el proyecto tanto directa como indirectamente (a través de otra dependencia) haciendo referencia a dos construcciones diferentes de Bouncy Castle que tenían diferentes nombres de ensamblaje. Una de las compilaciones de Bouncy Castle fue el paquete NuGet, la otra fue una compilación de depuración de la fuente descargada de GitHub. Ambos eran nominalmente la versión 1.8.1, pero la configuración del proyecto del código GitHub estableció el nombre del ensamblado en BouncyCastle, mientras que el paquete NuGet tenía el nombre del ensamblado BouncyCastle.Criptografía. Al cambiar la configuración del proyecto, alineando así los nombres del ensamblado, se solucionó el problema.

 0
Author: mathiash,
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-02-08 20:18:28

Tengo un problema similar, y elimino RuntimeFrameworkVersion, y el problema se solucionó.

Intente eliminar 1.1.1 o

 0
Author: Arash,
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-21 16:18:23

Limpie su solución y reconstruya funcionó para mí (en Visual Studio, estas son opciones que obtiene cuando hace clic con el botón derecho en su explorador de soluciones), el error se ha ido en mi proyecto.

 -3
Author: Joost,
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
2016-12-30 08:30:38