在 .nuspec 文件中覆盖依赖项

3
我想通过打包项目文件.csproj而不是.nuspec来打包我的项目,但我还想明确指定依赖项。
问题在于,在打包项目文件时(以便我可以使用我的项目中的props),.nuspec文件中的<dependencies>未被使用。
我这样做是为了在一个地方更改我的props(在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>

由于这个原因,当在不同的组中使用相同的依赖包时,打包时出现以下错误:
已经添加了具有相同键的项。

所以您想同时使用 csproj 和 nuspec 来打包一个项目?问题在于,nuspec 中的任何内容都会在打包时覆盖 csproj/assemblyInfo,但您确切的问题是什么?您是否缺少依赖项?您是否尝试排除其他文件? - Joseph Devlin
@Kazuo 我想使用 csproj(我确定它使用了 nuspec 的某些部分)。问题是,除非我直接使用 nuspec,否则我指定的依赖项将不会被选中。 - mrahhal
所以你正在尝试打包它,然后在另一个项目中使用你的新包? - Joseph Devlin
@Kazuo 是的,我只能这样处理,因为我们有一些需求需要我们在针对另一个项目的特定框架(如net4)时“依赖”于更多的包。如果不是因为这个扁平化问题,一切都很好,我真的不知道为什么nuget在这种情况下会这样做。 - mrahhal
1个回答

2
你的 csproj 和 nuspec 文件应该一起工作,如果它们具有完全相同的名称并且位于同一个目录中,例如:
  • ProjectDirectory
    • 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打包将不再将该包包括为依赖项。"
来源:

我相当确定我尝试过类似的东西,但我会再试一次并查看结果。如果 developmentDependency 起作用,我将不得不使用它,尽管这将非常麻烦。 - mrahhal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接