2017-10-11 2 views
-1

Ich habe eine Lösung, die aus 2 Projekten besteht: regelmäßige Klassenbibliothek für .NET 4.5 + Website (nicht Webanwendung) Projekt.Unterschiedliche Ergebnisse mit MsBuild und Visual Studio

Wenn ich diese Lösung mit Visual Studio erstellen - alle referenzierten Assemblys von Nuget-Pakete und lokale Referenzen werden in bin-Ordner des Website-Projekts kopiert.

Wenn ich versuche, eine Lösung mit MsBuild zu erstellen - bin Ordner der Website Projekt erhält keine Assemblys.

Website-Projekt nicht aktiviert ist in VS-Konfiguration gebaut werden (die in beiden Fällen durch Meldung berichtet wird)

bearbeiten - hier zusätzliche Erklärung.

Wenn ich ein Projekt von git klonen - Binärordner der Website enthält nur 4 Baugruppen bereits eingecheckt: Initial bin after clone

Wenn ich msbuild Befehl ausgeführt wird mit/t: Erstellen oder/t: Rebuild und/p: Konfiguration = Freigabe; Platform = "Any CPU" - ich werde nur eine Leistung von postbuild Ereignisse in meinem anderen Projekt erhalten, eingeschlossen in Lösung: After MsBuild

Allerdings, wenn ich aus VS bauen ausführen (Ctrl +Verschiebung + b) in Release/Debug config - bin haben alle erforderlichen Assemblies zum Ausführen der Webanwendung. After build in VS

Edit 2: Link zum Beispiel Lösung - https://github.com/akuryan/csharp-website-test

Wenn man es baut mit msbuild TestApp.sln /t:Rebuild /p:Configuration=Release;Platform="Any CPU" - dies führt in nur Test.Core * und LetsEncrypt.Umbraco.dll (zunächst überprüft, in) gefunden an. ~\Test.Web\bin\ (wobei Test.Web das Website-Projekt ist). Wenn man TestApp.sln mit VisualStudion 2015 erstellt (ich nehme an, 2013 und 2017 wird dasselbe sein) - ~\Test.Web\bin\ bekommt eine ganze Menge von Baugruppen.

+0

Würden Sie uns den GitHub-Link mitteilen, damit wir dieses Problem reproduzieren können? –

+0

Siehe letzten edit2 :) –

Antwort

1

Unterschiedliche Ergebnisse mit MsBuild und Visual Studio

dass, weil die alle dll.refresh Datei im Ordner ist neben der Binärdatei werden von .gitignore ignoriert.

Da Websiteprojekte keine Projektdatei (.csproj) zum Ablegen der Assemblyverweise enthalten, werden die Dateien *.dll.refresh von MSBuild verwendet, um die Assemblyverweise zu verstehen. Der Inhalt der Datei ist der relative Pfad zum .dll über den Paketordner für die Lösung. Wenn Sie all diese .dll .refresh von .gitignore ignorieren, konnte MSBuild die dll-Dateien nicht verarbeiten.

Um dies zu testen, habe ich ein Website-Projekt, ein nuget Paket, um es hinzuzufügen, dann löschen Sie die Dateien dll aber halten die .dll.refresh Dateien im Ordner bin.Erstellen Sie die Website-Projekt von MSBuild-Befehlszeile:

msbuild.exe TestWebsite.sln /t:Rebuild 

Nach diesem Befehl abgeschlossen ist, die dll Dateien Kopie an den bin Ordner.

So bauen und Paket wiederherstellen zu arbeiten sieht aus wie Sie müssen halten Sie die .dll.refresh Dateien im Ordner bin. Sie können die anderen Binärdateien von Ihrem Versionskontrollsystem entfernen.

Hinweis:

update-package -reinstall 

hoffe, das hilft: Wenn Sie diese .dll.refresh zurück erhalten möchten, können Sie die Befehlszeile in dem Package Manager-Konsole verwenden können.

Verwandte Themen