Dot-Net
NuGet 包顯示沒有依賴項?
我嘗試從 .NET 4.7.2 類庫 (VS2017) 製作 NuGet 包,但生成的 NuGet 包出人意料地顯示沒有依賴項(這是一個錯誤)。
我的設置是這樣的:
- 我的類庫是 .NET Framework 4.7.2
- 我的類庫使用另一個NuGet 包(具有依賴項)。
- 我的類庫在 .csproj 中使用packageReferences
- 我的類庫包含一個正確的 .nuspec 文件
- 我使用nuget.exe 包來創建包
nuget.exe pack命令應自動填充所需的依賴項 - 這也曾經是早期的情況(在另一個項目中)。但是,當時我在類庫中使用了packages.config而不是packageReferences。這有什麼改變嗎?
到底是怎麼回事?
如何強制系統再次在我的包中包含所需的依賴項?
筆記:
- 該包由我們的 TeamCity 建構伺服器上的 MSBuild 腳本建構(沒有 VS2017)。它是呼叫*“nuget.exe restore”和後來 的“nuget.exe pack”*作為其建構邏輯的一部分的建構腳本。
- MSBuild 是 15.7 版
- nuget.exe 是版本 4.6.2
如何強制系統再次在我的包中包含所需的依賴項?
這是一個關於nuget pack 在使用 PackageReference 而不是 packages.config 時忽略依賴項的已知問題。
要解決此問題,您可以使用以下解決方法,NuGet 團隊仍在積極努力改進此方案:
PackageReference要打包通過csproj 本身管理依賴項的 C# 類庫 ,請添加對
NuGet.Build.Tasks.Pack( https://www.nuget.org/packages/NuGet.Build.Tasks.Pack/)的引用並從命令行執行msbuild /t:pack。我已經測試了這個解決方法,它工作正常。為確保此解決方法正常工作,我們需要注意以下幾點:
- 需要將nuget包添加
NuGet.Build.Tasks.Pack到項目中。- 需要添加屬性
/p:PackageOutputPath="D:\TesterFolder" -p:Authors=tester- 使用命令**
msbuild.exe /t:pack**,例如:msbuild.exe /t:pack "MyTestLibrary.csproj" /p:PackageOutputPath="D:\TestFolder" -p:Authors=tester此外,如果要使用
.nuspec文件創建 nuget 包,則應使用以下.nuspec文件:<?xml version="1.0"?> <package > <metadata> <id>MyTestLibrary</id> <version>1.0.0</version> <authors>Tester</authors> <owners>Tester</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Package description</description> <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> <copyright>Copyright 2018</copyright> <tags>Tag1 Tag2</tags> <dependencies> <group targetFramework=".NETFramework4.7.2"> <dependency id="Microsoft.Owin" version="4.0.0" exclude="Build,Analyzers" /> </group> </dependencies> </metadata> <files> <file src="bin\Debug\MyTestLibrary.dll" target="lib\net472\MyTestLibrary.dll" /> </files> </package>然後我們可以
nuget.exe pack用來創建nuget包。但是,使用這種方法,我們必須在文件中手動填寫所需的依賴.nuspec項。希望這可以幫助。