Visual Studio 2017 Nuget包将项目引用排除为另一个nuget引用,而是添加程序集

时间:2017-09-23 05:07:30

标签: nuget visual-studio-2017 nuget-package

当我们在visual studio 2017中创建一个nuget包时,默认情况下它会将项目引用添加为另一个nuget引用。 我们如何在创建包时禁用它:

  • 选择其他包名称
  • 在创建包
  • 时包含项目的dll

1 个答案:

答案 0 :(得分:7)

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,您希望另外包含在.nupkg文件中,而不是为该引用的项目发布额外的NuGet包。

指定不同的NuGet包更加困难。它需要手动创建一个.nuspec文件来使用它来打包NuGet包。您可以在https://github.com/dasMulli/nuget-include-p2p-example/tree/master/LibA看到如何完成此操作的示例 - LibA.csproj设置为在调用LibA.nuspec时使用dotnet pack