This sample zeigt ein .NET Core-Projekt, das in ein nugget-Paket nur mit dotnet pack
verpackt werden kann, und wenn es in einem anderen Projekt wiederhergestellt wird, integriert es in der Msbuild-Pipeline. Eines der großartigen Dinge an diesem Beispiel ist die Erstellung eines nugget-Pakets, das mit msbuild unter Linux, Mac und Windows integriert werden kann. Der benutzerdefinierte Buildcode hat jedoch keine Abhängigkeiten von anderen Assemblys..net Kern Msbuild nugget mit zusätzlichen Baugruppen
Wie kann ich dieses Beispiel anpassen, um Code zu verwenden, der eine Abhängigkeit verwendet?
Hier sind meine Fehlversuche:
Versuch 1
ich ein Paket Verweis auf Newtonsoft.Json hinzugefügt und geändert den Code einige JSON Serialisierung zu tun. Doch in dem Projekt, das den Build nuget verwendet, wenn ich ein dotnet publish
tun, ich die folgende Fehlermeldung erhalten:
error MSB4018: The "Zip" task failed unexpectedly. [C:\git\MSBuild-Features-With-Nate-McMaster\Video-2\1-NuGet\Web.csproj]
error MSB4018: System.IO.FileNotFoundException: Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The system cannot find the file specified. [C:\git\MSBuild-Features-With-Nate-McMaster\Video-2\1-NuGet\Web.csproj]
Außerdem, wenn mein Projekt nicht bereits eine Abhängigkeit von JSON.NET und fügte hinzu, die Build hat nugget würde es unnötigerweise hinzufügen.
Versuch 2
I nuget.exe spec
eine .nuspec
Datei zu erstellen. Am Ende der Datei, fügte ich hinzu:
<files>
<file src="bin\Release\**" target="build" />
<file src="build\**" target="build" />
</files>
jedoch beide "dotnet Pack" und "msbuild/t: packen" ignorieren Sie die Datei und nuget.exe pack
schlägt mit dem Fehler Unable to find 'bin\Release\0-WriteATask\bin\Release\'. Make sure the project has been built.
. Wenn ich nuget.exe pack Zipper.nuspec
oder msbuild /t:pack /p:NuspecFiles=Zipper.nuspec
versuche, scheitern beide mit der Nachricht Value cannot be null or an empty string.
.
Versuch 3
bearbeitet ich die nuspec alle der Platzhalter zu entfernen, die normalerweise aus dem Projekt (beliebige Zeichenfolge beginnt und endet mit einem $) berechnet werden. Dann erstellt eine nuget.exe pack Zipper.nuspec
eine Nupkg-Datei, und der Ordner net46 enthält Newtsonsoft.Json.dll, aber der Ordner netstandard1.3 nicht.
Nate, danke für das Video und Probe, und jetzt für diese Antwort! Ich entwickelte ein schreckliches msbuild-Skript, das das Projekt packte (ohne Abhängigkeiten), entzippte es, löschte die automatisch generierten Dateien (mit Ausnahme der nuspec), wendete eine XSLT auf die nuspec an, machte eine 'dotnet publish' für jede TFM und tat es dann ein Nuget-Pack in der Nuspec-Datei. Das Beispiel in Mads Code ist viel, viel besser. Danke! – Ziv