Nuspec与csproj的依赖关系

时间:2018-06-22 07:43:21

标签: .net-core nuget csproj nuspec

我有一个同时具有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>

当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>

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

1 个答案:

答案 0 :(得分:5)

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

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

  1. 传统方式:使用.nuspec文件,这将禁用第二种方式
  2. 新方法:specifying them in .csproj file

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

dotnet pack执行恢复并在项目上构建,并用自动生成的.nuspec文件打包,将.csproj中的所有nuget元数据属性解析为.nuspec属性,并将所有项目引用作为nuget包引用(对于手动指定的.nuspec文件不可用),因此可以自动确保版本控制,依赖关系和程序包文件结构。

My own library可能是一个示例。版本和依赖项仅在应有的位置指定一次,并且不再有任何烦人的重复配置。在解决方案目录中执行dotnet pack会在.nupkg目录中生成所有好的dist