【发布时间】:2017-09-23 05:07:29
【问题描述】:
当我们在 Visual Studio 2017 中创建一个 nuget 包时,它默认将项目引用添加为另一个 nuget 引用。 我们如何在创建包时禁用它,而不是:
- 选择不同的包名
- 在创建包时包含项目的 dll
【问题讨论】:
标签: nuget visual-studio-2017 nuget-package
当我们在 Visual Studio 2017 中创建一个 nuget 包时,它默认将项目引用添加为另一个 nuget 引用。 我们如何在创建包时禁用它,而不是:
【问题讨论】:
标签: nuget visual-studio-2017 nuget-package
PackageReference 可以用PrivateAssets="All" 标记,以确保在打包时它不会成为消费库的 NuGet 依赖项。然后消费库可以使用自定义目标将文件添加到构建的 nuget 包中。 csproj 文件的完整示例如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<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>
其中testprivatelib.csproj 是一个构建DLL 的项目,您希望将该DLL 添加到.nupkg 文件中,而不是为该引用的项目发布额外的NuGet 包。
指定不同的 NuGet 包更加困难。它需要手动创建一个.nuspec 文件,使用它来打包 NuGet 包。您可以在 https://github.com/dasMulli/nuget-include-p2p-example/tree/master/LibA 上看到一个示例 - LibA.csproj 设置为在调用 dotnet pack 时使用 LibA.nuspec。
【讨论】: