Nuspec与csproj的依赖关系

Chr*_*uer 4 csproj nuget nuspec .net-core

我有一个同时具有nuspec和csproj文件的Dotnet Core 2.1项目-一个主要的麻烦是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>
Run Code Online (Sandbox Code Playgroud)

虽然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>
Run Code Online (Sandbox Code Playgroud)

两者很容易不同步,并且两次保留相同的信息很烦人。有办法避免这种情况吗?

Als*_*ein 5

肯定有一种简单的方法,只使用dotnet pack代替nuget pack.csproj文件而不是.nuspec文件即可。

dotnet pack 支持两种指定nuget包属性的方法。

  1. 传统方式:使用.nuspec文件,这将禁用第二种方式
  2. 新方法:.csproj文件中指定它们

dotnet pack支持这两种方式,但是您必须添加NuspecFile属性来引用.nuspec文件,并且传统方式存在很多错误和功能缺失,这意味着您只能使用新的方式。

dotnet pack执行还原并在项目上构建,并用自动生成的.nuspec文件打包,将所有nuget元数据属性解析.csproj.nuspec属性,将所有项目引用解析为nuget包引用(这不适用于手动指定的.nuspec文件),以便进行版本控制,依赖性,和包文件结构可以自动得到保证。

我自己的图书馆就是一个例子。版本和依赖项仅在应有的位置指定一次,并且不再有任何烦人的重复配置。执行dotnet pack关于解决方案目录将产生都好.nupkg于S dist目录。