Ho quattro progetti nella mia soluzione Visual Studio (tutti rivolti a .NET 3.5) - per il mio problema solo questi due sono importanti:
- MyBaseProject <: questa libreria di classi fa riferimento a un file DLL di terze parti (elmah.dll)
- MyWebProject1 <: questo progetto di applicazione Web ha un riferimento a MyBaseProject
Ho aggiunto il riferimento elmah.dll a MyBaseProject in Visual Studio 2008 facendo clic su "Aggiungi riferimento ..." → scheda "Sfoglia" → selezionando "elmah.dll".
Le proprietà del riferimento Elmah sono le seguenti:
- Alias - globale
- Copia local - true
- Cultura -
- Descrizione - Moduli e gestori di registrazione errori (ELMAH) per ASP.NET
- Tipo di file - Assembly
- Percorso - D: \ webs \ otherfolder \ _myPath \ __ tools \ elmah \ Elmah.dll
- Risolto - Vero
- Versione runtime - v2.0.50727
- Versione specificata - false
- Nome sicuro: falso
- Versione - 1.0.11211.0
In MyWebProject1 ho aggiunto il riferimento a Project MyBaseProject da: "Aggiungi riferimento ..." → scheda "Progetti" → selezionando "MyBaseProject". Le proprietà di questo riferimento sono le stesse tranne i seguenti membri:
- Descrizione -
- Percorso - D: \ webs \ CMS \ MyBaseProject \ bin \ Debug \ MyBaseProject.dll
- Versione - 1.0.0.0
Se eseguo la build in Visual Studio, il file elmah.dll viene copiato nella directory bin del mio MyWebProject1 , insieme a MyBaseProject.dll!
Tuttavia, se pulisco ed eseguo MSBuild per la soluzione (tramite D: \ webs \ CMS> C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: ReBuild / p: Configuration = Debug MyProject.sln ) il file elmah.dll manca nella directory bin di MyWebProject1, sebbene la build stessa non contenga alcun avviso o errore!
Ho già fatto in modo che .csproj di MyBaseProject contenga l' elemento privato con il valore "true" (che dovrebbe essere un alias per " copia locale " in 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>
(Il tag privato non appariva nell'XML di .csproj per impostazione predefinita, anche se Visual Studio diceva "copia locale" vero. Ho cambiato "copia locale" in falso - salvato - e lo ho impostato di nuovo su vero - salva!)
Cosa c'è di sbagliato in MSBuild? Come ottengo il riferimento (elmah.dll) copiato nel cestino di MyWebProject1?
NON voglio aggiungere un'azione di copia postbuild al comando postbuild di ogni progetto! (Immagina che molti progetti dipendano da MyBaseProject!)