This sample顯示了一個.NET Core項目,它可以使用dotnet pack
打包成nuget包,當在另一個項目中恢復時,它將集成到msbuild管道中。這個示例的好處之一是創建了一個nuget包,它與Linux,Mac和Windows上的msbuild集成。但是,自定義構建代碼不具有任何其他程序集的依賴關係。.net core msbuild nuget附加程序集
我該如何調整此示例以使用使用依賴關係的代碼?
這裏是我的失敗嘗試:
嘗試1
我加入Newtonsoft.Json一攬子參考,並改變了代碼做一些JSON序列化。然而,在使用生成的NuGet,當我做了dotnet publish
,我得到以下錯誤的項目:
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]
另外,如果我的項目尚未有JSON.NET的依賴,增加了建設nuget會不必要地添加它。
嘗試2
我用nuget.exe spec
創建.nuspec
文件。在文件的最後,我說:
<files>
<file src="bin\Release\**" target="build" />
<file src="build\**" target="build" />
</files>
然而,無論是「DOTNET包」和「的MSBuild /噸:包」忽略該文件,並nuget.exe pack
失敗,出現錯誤Unable to find 'bin\Release\0-WriteATask\bin\Release\'. Make sure the project has been built.
。
如果我嘗試nuget.exe pack Zipper.nuspec
或msbuild /t:pack /p:NuspecFiles=Zipper.nuspec
,它們都會失敗並顯示消息Value cannot be null or an empty string.
。
嘗試3
我編輯的nuspec刪除所有那些通常從項目計算(任何字符串開始和以$結尾)的佔位符。然後,做一個nuget.exe pack Zipper.nuspec
創建一個nupkg文件,並且net46文件夾包含Newtsonsoft.Json.dll,但netstandard1.3文件夾不包含。
Nate,謝謝你的視頻和示例,現在爲這個答案!我開發了一個可怕的msbuild腳本,它打包了項目(沒有依賴項),解壓縮它,刪除自動生成的文件(nuspec除外),將XSLT應用於nuspec,爲每個TFM做了一個'dotnet publish',然後做了nuspec文件上的nuget包。 Mads的代碼中的例子要好得多。謝謝! – Ziv