【问题标题】:Dependencies in Nuspec vs. csprojNuspec 与 csproj 中的依赖关系
【发布时间】:2018-12-01 15:28:05
【问题描述】:

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

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

【问题讨论】:

  • 我认为您应该将@Alsein 的答案标记为已接受。

标签: .net-core nuget csproj nuspec


【解决方案1】:

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

dotnet pack 支持 2 种方式来指定 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 将在dist 目录上生成所有好的.nupkgs。

【讨论】:

  • 非常感谢!您知道如何将 nuspec 文件中的引用替换为 csproj 文件吗?它们是我们使用 nuspec 的唯一原因: // dll 由解决方案中的另一个项目构建 // csproj 生成的主dll
  • 不建议您直接引用 dll 文件。至于项目引用,它们将在没有任何其他规范的情况下转换为 nuget 包引用。对于每个你没有源项目的程序集,如果nuget上有一个包,请使用它,或者你必须自己打包,然后上传到nuget.org或你自己的nuget服务器,保持私有。
猜你喜欢
  • 1970-01-01
  • 2018-07-12
  • 2013-05-07
  • 1970-01-01
  • 2015-12-28
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
相关资源
最近更新 更多