Mam cztery projekty w moim rozwiązaniu Visual Studio (wszyscy celują w .NET 3.5) - dla mojego problemu tylko te dwa są ważne:
- MyBaseProject <- ta biblioteka klas odwołuje się do pliku DLL innej firmy (elmah.dll)
- MyWebProject1 <- ten projekt aplikacji internetowej ma odniesienie do MyBaseProject
Dodałem odniesienie elmah.dll do MyBaseProject w Visual studio 2008, klikając „Dodaj odniesienie ...” → karta „Przeglądaj” → wybierając „elmah.dll”.
Właściwości odwołania Elmah są następujące:
- Aliasy - globalne
- Kopiuj lokalnie - prawda
- Kultura -
- Opis - moduły rejestrowania błędów i moduły obsługi (ELMAH) dla ASP.NET
- Typ pliku - zespół
- Ścieżka - D: \ webs \ otherfolder \ _myPath \ __ tools \ elmah \ Elmah.dll
- Rozwiązane - prawda
- Wersja środowiska wykonawczego - v2.0.50727
- Określona wersja - fałsz
- Silne imię - fałszywe
- Wersja - 1.0.11211.0
W MyWebProject1 dodałem odwołanie do projektu MyBaseProject poprzez: „Dodaj odniesienie ...” → zakładka „Projekty” → wybierając „MyBaseProject”. Właściwości tego odwołania są takie same, z wyjątkiem następujących elementów:
- Opis -
- Ścieżka - D: \ webs \ CMS \ MyBaseProject \ bin \ Debug \ MyBaseProject.dll
- Wersja - 1.0.0.0
Jeśli uruchomię kompilację w Visual Studio, plik elmah.dll zostanie skopiowany do katalogu bin mojego MyWebProject1 wraz z MyBaseProject.dll!
Jeśli jednak wyczyszczę i uruchomię MSBuild dla rozwiązania (przez D: \ webs \ CMS> C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe / t: ReBuild / p: Configuration = Debug MyProject.sln ) elmah.dll brakuje w katalogu bin MyWebProject1 - chociaż sama kompilacja nie zawiera ostrzeżeń ani błędów!
Już upewniłem się, że .csproj MyBaseProject zawiera element prywatny o wartości „true” (powinien to być alias „ kopiuj lokalnie ” w 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>
(Tag prywatny nie pojawił się domyślnie w pliku xml .csproj, chociaż Visual Studio powiedział „kopiuj lokalnie” true. Zmieniłem „kopiuj lokalnie” na false - zapisałem - i ustawiłem ponownie z powrotem na true - zapisz!)
Co jest nie tak z MSBuild? Jak uzyskać odniesienie (elmah.dll) skopiowane do kosza MyWebProject1?
NIE chcę dodawać operacji kopiowania po zakończeniu budowy do polecenia po zakończeniu każdego projektu! (Wyobraź sobie, że wiele projektów zależy od MyBaseProject!)