Dot-Net

NuGet 包顯示沒有依賴項?

  • January 9, 2020

我嘗試從 .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.Packhttps://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項。

希望這可以幫助。

引用自:https://stackoverflow.com/questions/51822826