在同一解决方案中引用来自另一个nuget包项目的nuget包项目

时间:2017-11-01 15:11:57

标签: visual-studio nuget .net-standard

我正在创建几个我想要作为Nuget包发布的.NET Standard 1.6库。他们共享一个共同的库,这是与前两个解决方案相同的第三个项目。共享库本身没有任何价值,但我假设如果我希望人们在同一个项目中同时使用这两个库,我也应该将共享库作为Nuget包发布。如果我不担心同一个共享库的多个副本"碰撞"当版本不匹配问题时,或者没有正确警告。

我是否还认为共享库也需要是Nuget包?有没有办法将共享库作为Nuget包引用,但在开发/调试此解决方案中的2个主库时,使用就像是项目引用一样?如果我必须发布到Nuget.org并等待包通过Nuget.org系统传播,然后在调试会话中使用更改版本,这实际上会减慢开发速度。请注意,这些是.NET标准项目。我找到了How to reference related projects in the same solution when Nuget packages are the required output,但这似乎与.NET Standard一起使用(在打包期间收到错误),我也不确定.NET Standard是否不再使用nuspec文件也会导致问题。

1 个答案:

答案 0 :(得分:1)

  

我也不确定.NET Standard是否不再使用nuspec文件也会导致问题。

.NET标准仍在使用.nuspec文件,使用旧学校nuget packa .nuspec将解决此问题。

根据文件dotnet pack

  

打包项目的NuGet依赖项被添加到.nuspec中   文件,以便在安装软件包时正确解析它们。   项目到项目的引用不包装在项目中。   目前,如果有的话,每个项目必须有一个包   项目到项目的依赖关系

因此,要在NuGet包中包含项目到项目引用,您需要手动维护.nuspec文件并添加依赖项。您可以参考Create .NET Standard packages with Visual Studio 2015了解详细信息。

此外,dasMulli通过添加和挂钩自定义目标提供了一种更简单的方法:

<Project>
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludeP2PAssets</TargetsForTfmSpecificBuildOutput>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\testprivatelib\testprivatelib.csproj" PrivateAssets="All" />
  </ItemGroup>

  <Target Name="IncludeP2PAssets">
    <ItemGroup>
      <BuildOutputInPackage Include="$(OutputPath)\testprivatelib.dll" />
    </ItemGroup>
  </Target>
</Project>

源代码来自:"donet pack" is not including project references