web-dev-qa-db-fra.com

DLL référence ne copiant pas dans le bac du projet

Projet A références Projet B et Le projet B fait référence à un DDL externe (restauré à l'aide de NuGet). Le DLL doit être copié dans Projet A dossier bin (avec avec Projet B 'DLL):

DLL References Copied To Bin

Dans mon cas, lors de l'exécution de Projet A , je reçois l'exception suivante levée:

Impossible de charger le fichier ou l'assembly "PostSharp, Version = 3.2.18.0, Culture = neutral, PublicKeyToken = b13fd38b8f9c99d7" ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.

Le DLL n'est pas copié dans Projet A . Toutes les autres références externes de Projet B sont très bien copiées, ce qui est déroutant pour moi.

Copy Local est défini sur true pour toutes les références impliquées. Exemple:

Copy Local Reference

Comment puis-je faire cela?

Remarque: Utilisation de Visual Studio 2013.

38
Dave New

Les options que j'ai trouvées étaient les suivantes:

  • Ajoutez une référence à PostSharp dans le projet A.
  • Ajoutez du code factice dans le projet B afin que le compilateur détecte que la référence est utilisée.
  • Ajoutez un événement de génération pour forcer la copie de la DLL.

Je n'aime aucune des solutions ci-dessus. Ce sont des hacks à mon avis et ne feront qu'une solution plus difficile à maintenir à long terme.

J'ai résolu le problème en utilisant un répertoire de sortie commun. Cela semble être une solution recommandée par beaucoup. J'ai également connu des temps de construction beaucoup plus rapides. Voir ce post Stackoverflow .

21
Dave New

Lorsque j'ai rencontré ce problème, c'est parce que j'ai changé le nom d'un projet, mais que je n'ai pas changé le nom de l'assembly - il était identique au nom de l'assembly d'un autre projet dans la solution.

0
AbleArcher

J'ai ajouté du code factice (inutilisé) sur le projet B, faisant référence au DLL nécessaire).

Ainsi, le compilateur devinera qu'il doit copier le DLL dans la sortie du projet A).

0
user10642724