J'utilise Visual Studio 2010 et C# pour créer des applications WinForms et des bibliothèques de classes. J'ai quelques bibliothèques communes que j'utilise pour tous les produits, et puis quelques bibliothèques spécifiques au produit pour mes applications. Aucune de mes assemblées n'est GAC'd. Tous les projets copient leur sortie à partir de leur dossier bin \ Debug respectif vers un dossier Repository commun et toutes les références d'assembly pointent vers ce dossier Repository.Visual Studio 2010 Assembly Référence Problème
Par exemple, Common.DAL.dll, Common.BLL.dll, Product.DAL.dll, Product.BLL et Product.exe
Les références entre les assemblées sont généralement quelque chose comme ceci:
- Product.exe comprend une référence à Product.BLL
- Product.BLL inclut des références à Common.BLL et Product.DAL
- Product.DAL comprend une référence à Common.DAL
- Comm on.BLL comprend refrence à Common.DAL
Lorsque tous ceux-ci sont inclus dans la même solution, la construction depencies sont quelque chose comme ceci:
- Common.BLL dépend Common.DAL
- Product.DAL dépend de Common.DAL
- Product.BLL dépend de Common.BLL et Product.DAL
- Product.exe dépend Product.BLL
Ce qui fait quelque chose de l'ordre de construction comme celui-ci:
- Common.DAL
- Common.BLL
- Product.DAL
- Product.BLL
- Product.exe
Souvent, lorsque j'essaie d'exécuter une application, j'obtiens l'erreur suivante:
Impossible de charger le fichier ou l'assemblage 'Common.DAL, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 4e5249f2e70e1da8' ou l'une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.
J'ai fait remonter le problème au fait que tous les assemblys construits à partir de la solution ne se retrouvent pas dans le dossier bin \ Debug de Product.exe.
Si je nettoie la solution, puis reconstruire, les fichiers apparaissent quelque chose comme ceci:
- Common.DAL \ bin \ Debug contient Common.DAL.dll
- Common.BLL \ bin \ Le débogage contient Common.BLL.dll et Common.DAL.dll
- Product.DAL \ bin \ Debug contient Common.DAL.dll et Product.DAL.dll
- Product.BLL \ bin \ Debug contient Common.BLL. dll, Common.DAL.dll, Product.BLL.dll et Product.DAL.dll
- mais Product.exe \ bin \ Debug contient uniquement Product.exe, Product.BLL et Product.DAL. Il manque les assemblages communs. Donc quand je cours Product.exe, j'obtiens l'erreur énumérée ci-dessus.
J'ai vérifié les propriétés de tous mes projets et propriétés. Ils utilisent tous .NET Framework 4. Toutes les références à mes assemblys ont la propriété 'Specific Version' définie sur false et la propriété 'Copy Local' sur true.
Je la force les ensembles manquants à copier Product.exe \ bin \ Debug en ajoutant des références aux assemblées communes dans le projet Product.exe, mais depuis Product.exe ne explicitement utilise la Assemblées communes, cela ressemble plus à un kludge qu'à une solution. J'ai regardé à travers la documentation MSDN et Visual Studio pour voir si je pouvais savoir ce qui influence ou affecte la copie des assemblages référencés, et j'ai cherché SO pour des problèmes similaires, mais je n'ai rien trouvé d'utile.
Je ne sais pas où aller ni quoi faire ensuite.
Pourquoi ne voulez-vous pas utiliser projet les références? Si vous utilisez des références de projet partout, avez-vous toujours ce problème? – McKay
Nous avons rencontré cela dans quelques projets et nous avons fini par avoir des références à tous les assemblys de l'assembly le plus haut (* .exe ou le site web) avec "copylocal = true". C'est une solution de contournement et je me demande aussi quelle serait la véritable cause d'un tel comportement. –
@McKay, les références de projet ne sont bonnes que lorsque les projets existent tous dans la même solution. Plusieurs fois, tous les projets ne seront pas dans la même solution. Les assemblys Common.DAL et Common.BLL ne seront généralement pas dans la solution Product.exe et même les projets Product.DAL et Product.BLL ne doivent pas nécessairement être dans la solution Product.exe. –