我正在创建几个我想要作为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文件也会导致问题。
答案 0 :(得分:1)
我也不确定.NET Standard是否不再使用nuspec文件也会导致问题。
.NET标准仍在使用.nuspec文件,使用旧学校nuget pack
和a .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>