3

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

问题是在打包项目文件时(以便我可以使用项目中的道具)<dependencies>.nuspec文件中的内容没有被使用。

我这样做是为了让我可以在一个地方(in 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.

4

1 回答 1

2

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

  • 项目目录
    • 我的项目.csproj
    • 我的项目.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 中使用此语法排除一些隐式依赖项

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

来源

于 2015-05-18T10:01:56.623 回答