引用库使用VS 2017在Nuspec中注册为其他nuget引用

问题描述 投票:0回答:1

所以我在项目A上引用了项目B.两者都是.net标准库。我想使用VS 2017创建一个nuget包。我只需在项目A上选中“在构建时生成Nuget包”来填充属性 - >包设置。

我甚至为B项目添加了

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

但是一旦我为Project A构建和nuget包就被创建了。它显示为项目B是另一个nuget包参考。如果我解压缩nupkg文件,在nuspec中,我可以看到以下行

 <dependencies>
      <group targetFramework=".NETStandard2.0">
        <dependency id="ProjectB" version="1.0.0" exclude="Build,Analyzers" />
        <dependency id="NETStandard.Library" version="2.0.3" exclude="Build,Analyzers" />        
      </group>
    </dependencies>

你可以看到projectB被视为nuget包参考。在安装它失败也说“找不到ProjectB nuget”为什么会发生这种情况?这是VS 2017中的一个错误吗?我甚至在ProjectA中添加了以下设置,它应该包含ProjectB作为dll工作正常。但尽管它也注册为nuget依赖

<Target Name="IncludeP2PAssets">
    <ItemGroup>
      <BuildOutputInPackage Include="..\ProjectB\bin\Release\netstandard2.0\ProjectB.dll" />
    </ItemGroup>
  </Target>

我的项目一个csproj文件没有任何packagereference作为项目B,如下所示它被设置为Projectreference

  <ItemGroup>
    <ProjectReference Include="..\ProjectB\ProjectB.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="NETStandard.Library" Version="2.0.3" />
  </ItemGroup>
visual-studio-2017 nuget .net-standard nuspec
1个回答
0
投票

在打包项目时,project to project references are considered by default as nuget package references。我能想到为什么这是一件好事的两个原因。

  1. 建议每个包装一个组件
  2. 简化包作者的开发体验

让我们考虑这两个原因

  1. 建议每个包装一个组件

想象一下,有一些实用程序程序集utility.dll,我在我的程序包PackageA中使用它。如果我将PackageA.dll和utlity.dll都放在我的包中,但后来创建了一个也包含utility.dll的PackageB,那么如果一个项目同时使用PackageA和PackageB会有冲突,因为会有两个不同的utility.dlls 。通过每个程序包有一个程序集,将有一个PackageA和PackageB,它们都依赖于实用程序包的不同版本,而NuGet可以使用它的版本控制规则来选择一个。

  1. 简化包作者的开发体验

想象一下,我有PackageB,它依赖于PackageA,我想做一个需要更改PackageA和PackageB的更改。如果PackageB有一个PackageAference到PackageA,这意味着我必须猜测我在PackageA中需要做哪些更改来完成PackageB中的更改,更改,提交,打包和发布PackageA,然后更改PackageB以使用新版本的PackageA 。但是,如果我猜测PackageA中所需的更改是错误的,那么我需要再次更改,提交,打包,发布PackageA,然后更改PackageB以使用新的新版本。使用包引用时,制作多包功能既缓慢又痛苦。

但是,通过使PackageA成为Package的项目引用,我可以修改PackageA,并且可以立即在Package中使用这些更改,而无需创建多个版本的PackageA.nupkg。

© www.soinside.com 2019 - 2024. All rights reserved.