927 votes

Le fichier de métadonnées '.dll' est introuvable.

Je travaille sur un projet WPF, C# 3.0, et j'obtiens cette erreur :

Error 1 Metadata file
'WORK=- \Tools\VersionManagementSystem\BusinessLogicLayer\bin\Debug
\BusinessLogicLayer.dll' could not be found C:\-=WORK=- \Tools
\VersionManagementSystem\VersionManagementSystem\CSC VersionManagementSystem

C'est ainsi que je référence mes contrôles d'utilisateur :

xmlns:vms="clr-namespace:VersionManagementSystem"
<vms:SignOffProjectListing Margin="5"/>

Cela se produit après chaque échec de la compilation. La seule façon d'obtenir la compilation de la solution est de commenter tous mes contrôles utilisateur et de recompiler le projet, puis de décommenter les contrôles utilisateur et tout va bien.

J'ai vérifié les ordres de construction et les configurations des dépendances.

Comme vous pouvez le voir, il semble avoir tronqué le chemin absolu du fichier DLL... J'ai lu qu'il y avait un bug avec la longueur. Est-ce un problème possible ?

C'est très ennuyeux et le fait de devoir commenter, construire et décommenter la construction devient extrêmement fatigant.

12 votes

J'ai eu un problème similaire (obtenir la même erreur que celle indiquée dans le titre) et je l'ai résolu en nettoyant et en reconstruisant le projet. Pour référencer correctement d'autres projets, je n'ai aucune idée

7 votes

J'ai marqué la réponse de Matt car elle semble avoir fonctionné pour la plupart des gens, mais elle n'a pas résolu mon problème initial. Je pense toujours que le problème est lié à la limite maximale de chemins d'accès de Windows. Voir ma réponse ci-dessous.

2voto

Servé Laurijssen Points 1209

Et six ans plus tard, lors d'une mise à niveau vers Visual Studio 2015, le même problème se pose. Comme cette solution particulière n'est pas dans cette liste, je l'ajoute.

Deux dll référencées étaient dans le c : \windows\system32... dossier. En les déplaçant vers un dossier non système et en ajoutant une référence au nouveau dossier, le problème a finalement été résolu. Le reste des problèmes était en fait ce que d'autres ont déjà dit ici.

2voto

Mathieu VIALES Points 2067

Dans mon cas, c'était ReSharper et, bien que mon projet soit axé sur le C# 6, on m'a proposé des remaniements pour utiliser des fonctionnalités réservées au C# 7.

Pour cette raison, j'ai fini par modifier ce code,

private DateTime? _joinedDate;
[Column(TypeName = "DateTime2")]
public DateTime JoinedDate
{
    get { return _joinedDate ?? DateTime.Now; }
    set { _joinedDate = value; }
}

dans ce code :

private DateTime? _joinedDate;
[Column(TypeName = "DateTime2")]
public DateTime JoinedDate
{
    get => _joinedDate ?? DateTime.Now;
    set => _joinedDate = value;
}

Pour une raison quelconque, le fait que les getter et setter utilisent des corps d'expression a fait que le compilateur a généré cette erreur de métadonnées au lieu d'une erreur de syntaxe.

2voto

josepainumkal Points 520

J'ai été confronté à ce problème. Dans mon cas, plusieurs projets C# étaient référencés en tant que fichiers DLL. Toute erreur de compilation dans un projet qui est utilisé comme fichier DLL (dans d'autres projets) entraîne une avalanche d'erreurs. La raison en est que l'erreur de compilation empêche la création du fichier DLL correspondant, ce qui entraîne une série d'erreurs dans les projets qui font référence au fichier DLL manquant.

Par conséquent, lorsque vous reconstruisez dans l'Explorateur de solutions (en ignorant les erreurs triviales de compilation), une série d'erreurs de type "fichier de métadonnées .dll introuvable" se produisent (ce qui vous fait penser que vous avez fait autre chose qu'une simple reconstruction).

Si vous êtes confronté à ce problème, la meilleure solution est de nettoyer la solution et de construire chaque projet un par un pour déterminer quel projet est à l'origine de l'erreur.

2voto

RenniePet Points 2388

Comme le souligne l'utilisateur @burzhuy, il peut être important d'examiner les éléments suivants Output et pas seulement la fenêtre Error List fenêtre.

Dans mon cas, je travaillais à apporter des modifications à l'interface de l'entreprise. Roslyn compilateur. Ses projets de construction effectuent une vérification supplémentaire pour voir si les champs publics sont compatibles avec ce qui a été défini comme l'interface publique du compilateur, sinon il produit une erreur RS0016 ou RS0017. J'avais ajouté quelques champs publics et corrigé l'erreur RS0016 en passant la souris sur l'erreur et en sélectionnant "Add to public API".

Plus tard, j'ai changé d'avis et j'ai déplacé les champs publics dans une autre classe. Pour une raison quelconque, cela a produit l'erreur "Metadata file could not be found error", et plus j'ai bricolé, plus j'ai eu d'erreurs.

Vous devez trouver le bon PublicAPI.Unshipped.txt (dans mon cas, c'était dans E:\Roslyn\32414\src\Compilers\Core\Portable ) et le modifier manuellement pour supprimer les lignes qui ne sont plus pertinentes.

2voto

ecth Points 384

J'ai eu le même problème et une autre solution.

Le problème : Une solution, des projets multiples. L'application principale qui utilise certains des autres résultats a échoué, en disant :

CSC : erreur CS0006 : Le fichier de métadonnées ' C:\Repos\TheApplication\TheApplicationCommon\bin\Debug\TheApplication.dll ' n'a pas pu être trouvé

Mais en fait, ce projet a généré C:\Repos\TheApplication\TheApplicationCommon\bin\Debug\TheApplicationCommon.dll Un autre projet qui utilise également la même dll a compilé sans problème.

Avant, j'ai mis à jour un paquet NuGet interne qui utilisait PostSharp 3.x.x.x et qui utilise maintenant PostSharp 4.x.x.x. Et ma solution était d'ajouter ceci à mon fichier *.csproj :

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="...">
  <Import Project="..." Condition="..." />
  <PropertyGroup>
    ...
    <AssemblyName>TheApplication</AssemblyName>
    ...
    <SkipPostSharp>True</SkipPostSharp> <!-- This line -->
  </PropertyGroup>
...

Une autre Solution->Nettoyer, une autre Solution->Reconstruire et cela fonctionne localement et sur le serveur de construction.

J'espère que cela aidera quelqu'un. Le fil est vieux et assez long, mais ce problème revient souvent et je n'ai pas encore vu cette solution. J'utilise Visual Studio 2017 (15.8.x).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X