首页 文章

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

提问于
浏览
0

我有3个类库项目(所有.NET Standard 2.0)都在同一个解决方案中 . 我想将它们打包成一个nuget并使用其他repos中的代码 .

但是,当我将它们打包到NuGet包中时,其中两个作为nuget依赖项添加到第三个,而不是直接引用为dll .

这是我的设置示例 .

3个项目 - A .csproj, B .csproj, C .csproj(所有类库,所有.NET标准2.0)

A 设置为启动项目并引用 BC

B 引用 C

C 没有引用其他两个(它只引用了2个第三方nugets)

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

我不确定是什么导致nuget表现得像这样(我想象它的设计)但我无法解决这个问题 .

我想要的是将项目 BC 打包为项目 A 的DLL而不是单独的软件包 .

3 回答

  • 0

    看起来您想要将DLL生成到B和C,然后将它们复制到A的资源文件夹中,该文件夹在A的nuspec文件中引用 . 也就是说,你只是打包A,恰好包含了B和C的DLL,所以B和C的构建,以及将这些DLL添加到A,应该单独发生_包装 .

  • 1

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

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

  • 0

    我不确定是什么导致nuget表现得像这样(我想象它的设计),但我无法解决这个问题 .

    是的,这种行为是设计的 . 当我们打包 .net core / .NET Standard 时, PrivateAssets 元数据标签控制依赖项资产是否流向父项目 . 如果该值设置为 All ,则此依赖关系资产将不会流向父项目 . 换句话说,项目B和C不会作为依赖项添加到包中 .

    检查Controlling dependency assets了解更多信息 .

    我想要的是将项目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>
    

    检查this thread了解更多详情 .

相关问题