Le type est défini dans un assemblage qui n'est pas référencé, comment trouver la cause?

je sais que le message d'erreur est commun et il y a beaucoup de questions sur SO à propos de cette erreur, mais aucune solution ne m'a aidé jusqu'à présent, donc j'ai décidé de poser la question. La différence avec la plupart des questions similaires est que j'utilise le répertoire App_Code.

message d'erreur:

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'.

Fichier Source:

c:inetpubwwwrootTestWebsiteApp_CodeCompanyProjectBusinessLogicManager.cs

suivant les suggestions ici et ici , j'ai supprimé toutes les instances de projet.Droit.dll à l'intérieur C:WindowsMicrosoft.NET/*.* Selon ce , j'ai vérifié si .les fichiers cs en question ont une action de compilation définie pour "compiler". Ils le font. J'ai également vérifié que le .cs fichier contenant le "Projet de.Droit.Le type" OperationsProvider " est déployé dans le répertoire App_Code.

pour une raison quelconque, application ne cherche pas le type dans le répertoire App_Code. Puisque j'ai supprimé toutes les instances de Projet.Droit.dll (que je connais), Je ne sais pas quelle assemblée le message d'erreur mentionne.

57
demandé sur Micha Wiedenmann 2013-12-18 18:37:36

16 réponses

quand vous obtenez cette erreur, ce n'est pas toujours évident ce qui se passe, mais comme l'erreur dit - vous manquez une référence. Prenons comme exemple la ligne de code suivante:

MyObjectType a = new MyObjectType("parameter");

il semble assez simple et vous avez probablement référencé" MyObjectType " correctement. Mais disons qu'un des surcharges pour le constructeur "MyObjectType" prend un type que vous n'avez pas référencé. Par exemple il y a une surcharge définie comme:

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

Qui est au moins un cas où vous obtiendrez cette erreur. Ainsi, recherchez ce type de pattern où vous avez Référencé le type mais pas tous les types de propriétés ou de paramètres de méthode qui sont possibles pour les fonctions étant appelées sur ce type.

espérons que cela vous amène au moins dans la bonne direction!

71
répondu drew_w 2013-12-18 14:44:34

Vérifier le cadre cible dans les projets.

Dans mon cas ", Vous devez ajouter une référence à l'assembly", l'appelant et les projets de référence n'ont pas la même cible cadre. Le projet caller avait .Net 4.5, mais la bibliothèque référencée avait la cible 4.6.1.

je suis sûr que le compilateur MS peut être plus intelligent et enregistrer un message d'erreur plus significatif. J'ai ajouté une suggestion à https://github.com/dotnet/roslyn/issues/14756

30
répondu Michael Freidgeim 2016-10-26 21:47:18

dans mon cas, c'était parce que faire une mise à jour du paquet NuGet avait seulement mis à jour les références à une dépendance dll dans certains mais pas tous projets dans ma solution - résultant en versions contradictoires. En utilisant un outil de style grep pour rechercher du texte dans *.csproj fichiers dans ma solution, il était alors facile de voir les projets qui doivent encore être mis à jour.

12
répondu rogersillito 2015-12-08 11:17:24

lorsque vous obtenez cette erreur, cela signifie que le code que vous utilisez fait référence à un type qui est dans un assemblage, mais l'assemblage ne fait pas partie de votre projet de sorte qu'il ne peut pas l'utiliser.

Projet De Suppression.Droit.dll est l'opposé de ce que vous voulez. Vous devez vous assurer que votre projet peut faire référence à l'assemblée. Il doit donc être placé dans le Cache Global Assembly ou dans le répertoire ~/Bin de votre application web.

Edit-si vous ne voulez pas utiliser l'assemblée, puis en supprimant ce n'est pas la bonne solution. Au lieu de cela, vous devez supprimer toutes les références dans votre code. Puisque l'Assemblée n'est pas directement nécessaire par le code que vous avez écrit, mais plutôt par quelque chose d'autre que vous faites référence, vous devrez remplacer cette assemblée référencée par quelque chose qui n'a pas de projet.Droit.dll comme une dépendance.

7
répondu mason 2014-02-03 15:36:53

il m'est arrivé que différents projets faisaient référence à différentes copies de la même dll. J'ai fait en sorte que tout Référencé le même fichier sur le disque, et l'erreur a disparu comme je m'y attendais.

2
répondu Gonzalo Méndez 2016-03-29 14:52:33

dans mon cas, je faisais référence à une bibliothèque qui était construite sur la mauvaise plate-forme/Configuration (je venais de créer la bibliothèque référencée).

de plus, je n'ai pas été en mesure de corriger le problème dans Visual Studio Configuration Manager -- incapable de changer et de créer de nouvelles plates-formes et Configurations pour cette bibliothèque. Je l'ai corrigé en corrigeant les entrées dans la section ProjectConfigurationPlatforms du fichier .sln pour ce projet. Toutes ses permutations ont été réglées à Debug|Any CPU (Je ne sais pas comment j'ai fait ça). J'ai surchargé les entrées pour le projet cassé avec celles pour un projet de travail et j'ai changé le GUID pour chaque entrée.

"1519110920 Entrées pour le fonctionnement du projet

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

entrées pour projet corrompu

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

les entrées corrompues sont maintenant fixées

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

j'espère que cela aidera quelqu'un.

2
répondu Joseph 2018-01-08 21:06:09

une des raisons principales peut être la propriété de DLL vous devez avant de faire quoi que ce soit pour vérifier le specific version property si elle vrai le faire faux

raison: peut-être le code source rejoint avec une autre (ancienne)version lorsque vous le construisez , mais cette bibliothèque mis à jour avec une nouvelle mise à jour la version maintenant différente dans L'Assemblée argent et votre application interdit d'obtenir une nouvelle DLL ,et après désactiver specific version property votre applacaten sera gratuit pour obtenir la nouvelle version de DLL références

0
répondu Mohammed Rashed Ali 2014-04-08 15:14:32

peut-être qu'une bibliothèque (fichier DLL) que vous utilisez nécessite une autre bibliothèque. Dans mon cas, j'ai fait référence à une bibliothèque qui contenait un modèle d'entité de base de données - mais j'ai oublié de faire référence à la bibliothèque entity framework.

0
répondu Graham Laight 2014-10-15 14:28:13

cela peut aussi signifier que vous utilisez une bibliothèque, qui expose les types (publics) qui sont définis dans une bibliothèque. même si vous ne les utilisez pas spécifiquement dans votre bibliothèque (celle qui ne construit pas).

ce qui empêche probablement est vous écriture code qui utilise une classe (qui dans sa signature a les types d'une bibliothèque non référencée) que vous ne pouvez pas utiliser.

0
répondu cr4ne 2015-12-14 11:08:52

pour moi la raison pour laquelle l'erreur est apparue était que le formulaire Web où l'erreur a été signalée a été déplacé d'un autre dossier, mais le nom de sa classe codefile est resté inchangé et ne correspondait pas au chemin réel.

état Initial:

chemin du fichier Original: /Folder1/Subfolder1 / MyWebForm.aspx.cs

nom de classe du fichier de codes Original: Folder1_Subfolder1_MyWebForm

après le déplacement du fichier:

chemin du fichier: /Folder1 / MyWebForm.aspx.cs

nom de classe du fichier de codes (inchangé, avec l'erreur indiquée)): Folder1_Subfolder1_MyWebForm

la solution:

renommer votre classe de fichier de codes Folder1_Subfolder1_MyWebForm

à un correspondant avec le nouvelle voie : Folder1_MyWebForm 151950920"

tout à la fois - Problème résolu, pas de rapport d'erreurs..

0
répondu Vladimír Hála 2016-06-30 10:15:56

le domaine de type'.tblUser' est défini dans un assemblage qui n'est pas référencé. Vous devez ajouter une référence au domaine assembly, Version = 1.0.0.0, Culture=neutre, PublicKeyToken = null'.

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

Note: assurez-vous que vos références sont correctes selon votre conteneur DI

0
répondu Asif Raza 2017-04-30 04:40:19

dans mon cas, c'est parce que j'ai utilisé

Opérateur Implicite

entre les classes BLL et DAL .quand je veux utiliser la couche BLL dans la couche Application j'ai eu cette erreur. J'ai changé

opérateur implicite

à

opérateur explicite

il OK. Merci

0
répondu Amirhossein Yari 2017-05-03 17:51:50

dans mon cas, la version de la dll référencée était en fait plus récente que celle que j'avais avant.

j'ai juste besoin de revenir à la version précédente et qu'il fixe.

0
répondu Hugo Nava Kopp 2018-02-07 16:31:14

pour moi, cela a été causé par le projet à la fois directement et indirectement (à travers une autre dépendance) faisant référence à deux constructions différentes de Château gonflable qui avaient des noms d'Assemblée différents. Une des constructions de Château gonflable était le paquet NuGet, l'autre était une construction de débogage de la source téléchargée à partir de GitHub. Tous les deux étaient nominalement version 1.8.1, mais les paramètres du projet du code GitHub ont placé le nom d'assemblage à BouncyCastle alors que le paquet NuGet avait le nom d'assemblage BouncyCastle.Cryptographique. Changer les paramètres du projet, alignant ainsi les noms d'assemblage, a réglé le problème.

0
répondu mathiash 2018-02-08 20:18:28

j'ai un problème similaire, et j'ai supprimé la version Runtimeframework, et le problème a été corrigé.

essayer de supprimer 1.1.1 ou

0
répondu Arash 2018-05-21 16:18:23

nettoyer votre solution et reconstruire a fonctionné pour moi (Dans Visual Studio, Ce sont des options que vous obtenez lorsque vous faites un clic droit dans votre explorateur de solution), l'erreur est allé dans mon projet.

-3
répondu Joost 2016-12-30 08:30:38