繁体   English   中英

NuGet将项目依赖项打包为nuget依赖项

[英]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设置为启动项目,并引用BC

B引用了C

C没有引用其他两个(仅引用2个第3方nuget)

当我将解决方案打包到nuget软件包中时,nuspec文件具有一个<dependencies>组,该组具有我项目中的所有nuget引用( 正确 )以及版本1.0.0( 不正确 )的项目BC的 2个依赖关系。

我不确定是什么原因导致了nuget的行为(我想像是设计使然),但是我无法解决这个问题。

我想要的是将项目BC打包为DLL打包到项目A,而不是单独打包。

我不确定是什么原因导致了nuget的行为(我想像是设计使然),但是我无法解决这个问题。

是的,这是设计使然。 当我们打包.net core / .NET StandardPrivateAssets元数据标记控制依赖项资产是否流向父项目。 如果该值设置为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM