我想通过打包项目文件.csproj而不是.nuspec来打包我的项目。但我也想明确指定依赖项。

问题是打包项目文件(以便我可以使用项目中的道具)时,未使用<dependencies>文件中的.nuspec

我这样做是为了可以在一个位置(在AssemblyInfo.cs中)更改道具,而不必在每个版本中都更改.nuspec。我知道我可以将.nuspec打包在我可以完全控制的位置,但这已经违背了目的。 (实际上,我现在确实正在执行此操作,直到可以覆盖依赖项为止)

有没有办法在.nuspec中显式覆盖依赖项?

编辑:

合并developmentDependency这几乎奏效。我在nuspec中使用依赖项组,由于某种原因nuget在打包后将其展平(当然,仅在打包csproj时)。因此:(仅用于演示)

<dependencies>
  <group>
    <dependency id="Some.Core" version="0.1.0" />
  </group>
  <group targetFramework="net4">
    <dependency id="Microsoft.Bcl.Async" version="1.0.168" />
  </group>
  <group targetFramework="net45">
    <dependency id="Some" version="0.1.0" />
  </group>
</dependencies>


变成这个:

<dependencies>
  <dependency id="Some.Core" version="0.1.0" />
  <dependency id="Microsoft.Bcl.Async" version="1.0.168" />
  <dependency id="Some" version="0.1.0" />
</dependencies>


因此,在不同的组中使用相同的软件包作为依赖项时,打包时会出现错误:

An item with the same key has already been added.

最佳答案

如果您的csproj和nuspec文件具有完全相同的名称并且位于相同的目录中,则它们应该在打包时一起工作。


项目目录

MyProject.csproj
MyProject.nuspec



所以打电话

nuget pack MyProject.csproj


应该从csproj / assemblyInfo / packages.config等中获取所有隐式数据,然后将该元数据与nuspec中指定的内容合并。关于依赖项,您可以使用nuspec文件中的常规语法包括非隐式依赖项,如下所示

<dependencies>
  <dependency id="RouteMagic" version="1.1.0" />
  <dependency id="RouteDebugger" version="1.0.0" />
</dependencies>


并且您可以在项目packages.config中使用此语法排除一些隐式依赖项。

“通过在packages.config中的包中添加一个developmentDependency =“ true”属性,nuget.exe包将不再将该包作为依赖项包含在内。”

资料来源


Adding Dependencies
Excluding Dependencies

10-05 22:15