[英]NuGet packages project dependencies as nuget dependencies
我有3个类库项目(所有.NET Standard 2.0),它们都在同一解决方案中。 我想将它们打包到单个nuget中,并在其他存储库中使用代码。
但是,当我将它们打包到NuGet软件包中时,其中两个作为对nuget的依赖关系添加到第三个,而不是直接引用为dll。
这是我的设置示例。
3个项目-A .csproj, B .csproj, C .csproj(所有类库,所有.NET Standard 2.0)
将A设置为启动项目,并引用B和C
B引用了C
C没有引用其他两个(仅引用2个第3方nuget)
当我将解决方案打包到nuget软件包中时,nuspec文件具有一个<dependencies>
组,该组具有我项目中的所有nuget引用( 正确 )以及版本1.0.0( 不正确 )的项目B和C的 2个依赖关系。
我不确定是什么原因导致了nuget的行为(我想像是设计使然),但是我无法解决这个问题。
我想要的是将项目B和C打包为DLL打包到项目A,而不是单独打包。
我不确定是什么原因导致了nuget的行为(我想像是设计使然),但是我无法解决这个问题。
是的,这是设计使然。 当我们打包.net core
/ .NET Standard
, PrivateAssets
元数据标记控制依赖项资产是否流向父项目。 如果该值设置为All
,则此依赖项资产将不会流到父项目。 换句话说,项目B和C将不会作为依赖项添加到包中。
选中控制依赖项资产以获取更多信息。
我想要的是将项目B和C打包为DLL打包到项目A,而不是单独打包。
就像我在第一个问题中所说的那样,我们可以使用PrivateAssets
元数据标签来控制依赖项资产是否流向父项目,但是PrivateAssets
元数据标签不会将项目B和C打包为项目A DLL。
如果您希望将项目B和C打包为DLL而不是单独的软件包打包到项目A,则需要使用.nuspec
文件来手动包括它们。
.nuspec
像:
<?xml version="1.0"?>
<package >
<metadata>
<id>TestDemo</id>
<version>1.0.0</version>
<authors>Tester</authors>
<owners>Tester</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>TestDemo</description>
<releaseNotes>Summary of changes made in this release of the package. </releaseNotes>
<copyright>Copyright 2017</copyright>
<tags>Tag1 Tag2</tags>
</metadata>
<files>
<file src="bin\debug\projectA.dll" target="lib\.netstand2.0" />
<file src="<Path>\projectB.dll" target="lib\.netstand2.0" />
<file src="<Path>\projectC.dll" target="lib\.netstand2.0" />
</files>
</package>
检查此线程以获取更多详细信息。
您必须手动/或通过一些预/后构建命令/脚本来更新.nuspec
依赖项的版本。 如果您需要对许多项目执行此操作,那么我建议您编写一个脚本并在构建前/构建后事件上运行。
.nuspec
无法检测依赖项本身的版本。
看来您想生成B和C的DLL,然后将它们复制到A的nuspec文件中引用的A的资源文件夹中。 也就是说,您只是包装A,而恰好包括B和C的DLL,因此B和C的构建以及向A添加那里的DLL应该在包装A 之前分别进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.