我想通过打包项目文件.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