300 Stimmen

MSBuild kopiert keine Referenzen (DLL-Dateien), wenn Projektabhängigkeiten in der Lösung verwendet werden

Ich habe vier Projekte in meiner Visual Studio-Lösung (alle auf .NET 3.5 ausgerichtet) - für mein Problem sind nur diese beiden wichtig:

  1. MyBaseProject <- diese Klassenbibliothek verweist auf eine Drittanbieter-DLL-Datei (elmah.dll)
  2. MeinWebProjekt1 <- dieses Webanwendungsprojekt hat einen Verweis auf MyBaseProject

Ich habe den Verweis auf elmah.dll zu MyBaseProject in Visual Studio 2008 durch Klicken auf "Verweis hinzufügen..." Wählen Sie auf der Registerkarte "Durchsuchen" die Datei "elmah.dll" aus.

Die Eigenschaften der Elmah-Referenz sind wie folgt:

  • Aliasnamen - global
  • Lokal kopieren - wahr
  • Kultur -
  • Beschreibung - Fehlerprotokollierungsmodule und -handler (ELMAH) für ASP.NET
  • Dateityp - Baugruppe
  • Pfad - D:\webs\otherfolder\_myPath\__tools\elmah\Elmah.dll
  • Gelöst - Wahr
  • Laufzeitversion - v2.0.50727
  • Angegebene Version - false
  • Starker Name - falsch
  • Version - 1.0.11211.0

MeinWebProjekt1 Ich habe den Verweis auf das Projekt MyBaseProject von hinzugefügt: "Referenz hinzufügen..." Registerkarte "Projekte", Auswahl von "MyBaseProject". Die Eigenschaften dieser Referenz sind die gleichen, mit Ausnahme der folgenden Mitglieder:

  • Beschreibung -
  • Pfad - D:\webs\CMS\MyBaseProject\bin\Debug\MyBaseProject.dll
  • Version - 1.0.0.0

Wenn ich den Build in Visual Studio Die Datei elmah.dll wird in mein MyWebProject1's Mülltonne Verzeichnis, zusammen mit MyBaseProject.dll!

Wenn ich jedoch sauber mache und MSBuild für die Lösung (über D:\webs\CMS > C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /t:ReBuild /p:Configuration=Debug MyProject.sln) die elmah.dll fehlt im bin-Verzeichnis von MyWebProject1 - obwohl der Build selbst keine Warnungen oder Fehler enthält!

Ich habe bereits sichergestellt, dass die .csproj von MyBaseProject die privat Element mit dem Wert "true" (das sollte ein Alias für " lokal kopieren " 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>

(Das private Tag erschien standardmäßig nicht in der .csproj-xml, obwohl Visual Studio sagte, dass "copy local" true sei. Ich schaltete "copy local" auf false - gespeichert - und setzte es wieder auf true - gespeichert!)

Was ist mit MSBuild los? Wie bekomme ich die (elmah.dll) Referenz in MyWebProject1's bin kopiert?

Ich möchte NICHT zu jedem Postbuild-Befehl eines Projekts eine Kopieraktion hinzufügen! (Stellen Sie sich vor, ich hätte viele Projekte, die von MyBaseProject abhängen!)

8voto

vangorra Punkte 1601

Das Problem, mit dem ich konfrontiert war, war, dass ich ein Projekt habe, das von einem Bibliotheksprojekt abhängig ist. Um zu bauen, habe ich diese Schritte befolgt:

msbuild.exe myproject.vbproj /T:Rebuild
msbuild.exe myproject.vbproj /T:Package

Das bedeutete natürlich, dass ich die dll-Dateien meiner Bibliothek in der Bin-Datei und vor allem in der Zip-Datei des Pakets vermisste. Ich habe festgestellt, dass dies perfekt funktioniert:

msbuild.exe myproject.vbproj /T:Rebuild;Package

Ich habe keine Ahnung, warum das funktioniert oder warum es nicht funktioniert hat. Aber ich hoffe, das hilft.

7voto

Steven Engels Punkte 81

Ich hatte gerade genau das gleiche Problem und es stellte sich heraus, dass es dadurch verursacht wurde, dass 2 Projekte in der gleichen Lösung eine unterschiedliche Version der Bibliothek eines Drittanbieters referenzierten.

Nachdem ich alle Verweise korrigiert hatte, funktionierte alles perfekt.

6voto

Scott Punkte 4033

Wie Alex Burtsev in einem Kommentar erwähnte, wird alles, was nur in einem XAML-Ressourcenwörterbuch verwendet wird, oder in meinem Fall alles, was nur in XAML und nicht im dahinter liegenden Code verwendet wird, von MSBuild nicht als "in Gebrauch" angesehen.

Es genügte also, MSBuild davon zu überzeugen, dass die Baugruppe tatsächlich in Gebrauch war, indem man einen Dummy-Verweis auf eine Klasse/Komponente in der Baugruppe in etwas Code dahinter einfügte.

5voto

J Z Punkte 119

Verwendung des Schemas von deadlydog,

Y => X => A => B ,

Mein Problem war, dass beim Erstellen von Y die Baugruppen (A und B, alle 15) aus X nicht im Bin-Ordner von Y auftauchten.

Ich konnte das Problem lösen, indem ich die Referenz X aus Y entfernte, speicherte, erstellte, dann die Referenz X wieder hinzufügte (eine Projektreferenz) und speicherte, erstellte und A und B begannen, im Bin-Ordner von Y aufzutauchen.

4voto

Fuyu Persimmon Punkte 473

Ändern des Zielrahmens von .NET Framework 4 Client-Profil a .NET Framework 4 hat dieses Problem für mich gelöst.

In Ihrem Beispiel also: Setzen Sie das Ziel-Framework auf MyWebProject1 auf .NET Framework 4

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X