我想通过打包项目文件.csproj而不是.nuspec来打包我的项目。但我也希望显式地指定依赖项。
问题是,在打包项目文件(以便我可以使用项目中的道具)时,没有使用.nuspec文件中的.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.
发布于 2015-05-18 10:01:56
您的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包将不再将该包作为依赖项包括在内。“
资料来源
https://stackoverflow.com/questions/30284964
复制相似问题