首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NuGet将项目依赖项打包为nuget依赖项

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

Stack Overflow用户
提问于 2018-10-15 10:14:58
回答 3查看 2K关注 0票数 1

我有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引用(正确),以及项目BC的两个依赖项,版本为1.0.0 (不正确)。

我不知道是什么原因导致nuget这样的行为(我想象它的设计),但我不能用我的头来解决这个问题。

我希望项目B、C被打包为DLL,用于项目A,而不是单独打包。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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喜欢:

代码语言:javascript
运行
复制
<?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>

有关更多细节,请查看这条线

票数 3
EN

Stack Overflow用户

发布于 2018-10-15 10:31:33

您必须手动/或通过一些预/后构建命令/脚本更新.nuspec中的依赖项版本。如果您需要对许多项目执行此操作,那么我建议您编写一个脚本,并在构建前后事件上运行。

.nuspec无法检测到依赖项本身的版本。

票数 0
EN

Stack Overflow用户

发布于 2018-10-19 20:48:33

看起来您想要将DLL生成到B和C,然后将它们复制到A的资源文件夹中,后者在A的nuspec文件中引用。也就是说,您只是在打包A,它碰巧包括B和C的DLL,所以B和C的构建以及将其中的DLL添加到A中,应该在A的封装之前分别进行

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52814421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档