我有3个类库项目(所有.NET Standard 2.0)都在同一个解决方案中 . 我想将它们打包成一个nuget并使用其他repos中的代码 .
但是,当我将它们打包到NuGet包中时,其中两个作为nuget依赖项添加到第三个,而不是直接引用为dll .
这是我的设置示例 .
3个项目 - A .csproj, B .csproj, C .csproj(所有类库,所有.NET标准2.0)
A 设置为启动项目并引用 B 和 C
B 引用 C
C 没有引用其他两个(它只引用了2个第三方nugets)
当我将我的解决方案打包到nuget包中时,nuspec文件有一个 <dependencies>
组,其中包含项目的所有nuget引用(正确)以及项目的2个依赖项 B 和 C ,版本1.0.0(不正确)
我不确定是什么导致nuget表现得像这样(我想象它的设计)但我无法解决这个问题 .
我想要的是将项目 B 和 C 打包为项目 A 的DLL而不是单独的软件包 .
3 回答
看起来您想要将DLL生成到B和C,然后将它们复制到A的资源文件夹中,该文件夹在A的nuspec文件中引用 . 也就是说,你只是打包A,恰好包含了B和C的DLL,所以B和C的构建,以及将这些DLL添加到A,应该单独发生_包装 .
您必须手动/或通过某些pre / post构建命令/脚本更新
.nuspec
中的依赖项版本 . 如果你需要为很多项目执行此操作,那么我建议编写一个脚本并在pre / post构建事件上运行 ..nuspec
无法检测依赖项本身的版本 .是的,这种行为是设计的 . 当我们打包
.net core
/.NET Standard
时,PrivateAssets
元数据标签控制依赖项资产是否流向父项目 . 如果该值设置为All
,则此依赖关系资产将不会流向父项目 . 换句话说,项目B和C不会作为依赖项添加到包中 .检查Controlling dependency assets了解更多信息 .
就像我在第一个问题中所说的那样,我们可以使用
PrivateAssets
元数据标签来控制依赖项资产是否流向父项目,但PrivateAssets
元数据标签不会将项目B和C打包为项目A DLL .如果您希望将项目B和C打包为项目A的DLL而不是作为单独的包打包,我们需要使用
.nuspec
文件手动包含它们 ..nuspec
喜欢:检查this thread了解更多详情 .