我有3个类库项目(都是.NET标准2.0),它们都在同一个解决方案中。我想将它们打包到一个nuget中,并在其他repos中使用这些代码。
但是,当我将它们打包到NuGet包中时,其中两个将作为nuget依赖项添加到第三个包中,而不是作为dll直接引用。
这里是我的设置的一个例子。
三个项目- A.csproj,B.csproj,C.csproj (所有类库,全.NET标准2.0)
A设置为启动项目,并引用B、和C
B引用了C
C没有对另外两个的引用(它只引用了2个第三方nugets)
当我将我的解决方案打包到nuget包中时,nuspec文件有一个<dependencies>
组,它包含来自我的项目的所有nuget引用(正确),以及项目B和C的两个依赖项,版本为1.0.0 (不正确)。
我不知道是什么原因导致nuget这样的行为(我想象它的设计),但我不能用我的头来解决这个问题。
我希望项目B、和C被打包为DLL,用于项目A,而不是单独打包。
发布于 2018-10-16 08:09:58
我不知道是什么原因导致nuget这样的行为(我想象它的设计),但我不能用我的头来解决这个问题。
是的,这种行为是故意的。当我们打包.net core
/.NET Standard
时,PrivateAssets
元数据标记控制依赖资产是否流向父项目。如果该值设置为All
,则此依赖项资产不会流到父项目。换句话说,项目B和C不会作为依赖项添加到包中。
有关更多信息,请访问控制依赖资产。
我希望项目B和C被打包为项目A的DLL,而不是单独的包。
正如我在第一个问题中所说的,我们可以使用PrivateAssets
元数据标记控制依赖资产是否流向父项目,但是PrivateAssets
元数据标记没有将项目B和C打包为项目A DLL。
如果您希望项目B和C被打包为项目A的DLL,而不是单独的包,我们需要使用.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>
有关更多细节,请查看这条线。
发布于 2018-10-15 10:31:33
您必须手动/或通过一些预/后构建命令/脚本更新.nuspec
中的依赖项版本。如果您需要对许多项目执行此操作,那么我建议您编写一个脚本,并在构建前后事件上运行。
.nuspec
无法检测到依赖项本身的版本。
发布于 2018-10-19 20:48:33
看起来您想要将DLL生成到B和C,然后将它们复制到A的资源文件夹中,后者在A的nuspec文件中引用。也就是说,您只是在打包A,它碰巧包括B和C的DLL,所以B和C的构建以及将其中的DLL添加到A中,应该在A的封装之前分别进行。
https://stackoverflow.com/questions/52814421
复制相似问题