Dot-Net-Core

Nuspec 與 csproj 中的依賴關係

  • April 25, 2019

我有一個 Dotnet Core 2.1 項目,它有一個 nuspec 和一個 csproj 文件 - 一個主要的麻煩是 csproj 描述這樣的依賴項:

 <ItemGroup>
   <PackageReference Include="Refit" Version="4.6.16" />
     <PackageReference Include="Microsoft.AspNetCore.All" Version="2.1" />
     <PackageReference Include="Refit.HttpClientFactory" Version="4.6.16" />   
 </ItemGroup>

雖然 nuspec 這樣做:

<dependencies>
     <dependency id="Refit" version="4.6.16" />
     <dependency id="Refit.HttpClientFactory" version="4.6.16" />
     <dependency id="Microsoft.AspNetCore.All" version="2.1" />
   </dependencies>

兩者都很容易不同步,並且兩次保持相同的資訊很煩人。有沒有辦法避免這種情況?

肯定有一種簡單的方法,只需使用dotnet pack代替文件而不是nuget pack文件。.csproj``.nuspec

dotnet pack支持 2 種方式來指定 nuget 包屬性。

  1. 傳統方式:使用.nuspec文件,這將禁用第二種方式
  2. 新方法:在文件中指定它們.csproj

dotnet pack兩種方式都支持,但是您必須添加一個NuspecFile屬性來引用.nuspec文件,並且舊方式存在很多錯誤和功能缺失,這意味著您只能使用新方式。

dotnet pack在項目上執行恢復和建構,並使用自動生成的 .nuspec 文件將其打包,將所有 nuget 元數據屬性解析.csproj.nuspec屬性,並將所有項目引用作為 nuget 包引用(這不適用於手動指定的.nuspec文件),以便版本控制、依賴性、並且封包件結構的東西可以自動保證。

我自己的圖書館就是一個例子。版本和依賴項僅在應有的位置指定一次,並且不再有任何煩人的重複配置。在解決方案目錄上執行dotnet pack將在該目錄上生成所有好的.nupkgs dist

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