J'ai quatre projets dans ma solution Visual Studio (tout le monde cible .NET 3.5) - pour mon problème, seuls ces deux sont importants:
- MyBaseProject <- cette bibliothèque de classes fait référence à un fichier DLL tiers (elmah.dll)
- MyWebProject1 <- ce projet d'application Web a une référence à MyBaseProject
J'ai ajouté la référence elmah.dll à MyBaseProject dans Visual studio 2008 en cliquant sur "Ajouter une référence ..." → onglet "Parcourir" → en sélectionnant "elmah.dll".
Les propriétés de la référence Elmah sont les suivantes:
- Alias - global
- Copier local - vrai
- Culture -
- Description - Modules et gestionnaires de journalisation des erreurs (ELMAH) pour ASP.NET
- Type de fichier - Assemblage
- Chemin - D: \ webs \ otherfolder \ _myPath \ __ tools \ elmah \ Elmah.dll
- Résolu - Vrai
- Version d'exécution - v2.0.50727
- Version spécifiée - false
- Nom fort - faux
- Version - 1.0.11211.0
Dans MyWebProject1, j'ai ajouté la référence au projet MyBaseProject en: "Ajouter une référence ..." → onglet "Projets" → en sélectionnant "MyBaseProject". Les propriétés de cette référence sont les mêmes, à l'exception des membres suivants:
- La description -
- Chemin - D: \ webs \ CMS \ MyBaseProject \ bin \ Debug \ MyBaseProject.dll
- Version - 1.0.0.0
Si j'exécute la génération dans Visual Studio, le fichier elmah.dll est copié dans le répertoire bin de mon MyWebProject1 , avec MyBaseProject.dll!
Cependant, si je nettoie et exécute MSBuild pour la solution (via D: \ webs \ CMS> C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: ReBuild / p: Configuration = Debug MyProject.sln ) le elmah.dll est manquant dans le répertoire bin de MyWebProject1 - bien que la construction elle-même ne contienne aucun avertissement ou erreur!
J'ai déjà vérifié que le .csproj de MyBaseProject contient l' élément privé avec la valeur "true" (qui devrait être un alias pour " copier local " dans Visual Studio):
<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath>
**<Private>true</Private>**
</Reference>
(La balise privée n'apparaissait pas par défaut dans le xml du .csproj, bien que Visual Studio ait dit "copier local" vrai. J'ai basculé "copier local" sur faux - enregistré - et le redéfinir sur vrai - enregistrer!)
Quel est le problème avec MSBuild? Comment obtenir la référence (elmah.dll) copiée dans le bac de MyWebProject1?
Je ne veux PAS ajouter une action de copie post-construction à la commande post-construction de chaque projet! (Imaginez que de nombreux projets dépendent de MyBaseProject!)