如何从类库NuGet包中排除包?

时间:2018-06-15 12:11:07

标签: c# xml visual-studio nuget nuget-package

我有一个.NET Standard类库项目,它将构建到NuGet包中。我已经安装了docfx.console包,以便每次构建时都可以生成文档网站。

现在,当另一个项目安装我的库的NuGet包时,docfx.console NuGet包也会安装 - 我不想要。

在Package下的项目属性中,我选择在构建时生成NuGet包。当我构建它时,这将自动为我的库生成NuGet包。但在此选项卡中,我没有看到任何可以配置为排除任何包的地方。

因此,为了排除docfx.console包,我创建了一个包含以下内容的.nuspec文件:

<?xml version="1.0" encoding="utf-8" ?>

<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <!-- Required elements-->
    <id>My.Library</id>
    <version>1.0.1</version>
    <description>My Library's project dscription.</description>
    <authors>Me</authors>
    <copyright>My Copyright (c)</copyright>

    <!-- Optional elements -->
    <dependencies>
      <dependency id="docfx.console" version="2.36.1" exclude="build" />
    </dependencies>
    <!-- ... -->
  </metadata>
  <!-- Optional 'files' node -->
</package>

但它不起作用。在构建NuGet包时,如何更正它以排除docfx.console包?

或者,还有其他方法可以从NuGet包中排除docfx.console包吗?

1 个答案:

答案 0 :(得分:2)

  

如何从类库NuGet包中排除包?

根据NuGet官方文档Controlling dependency assets

  

您可能仅仅将依赖关系用作开发工具和   可能不希望将它暴露给将消耗你的项目   包。在这种情况下,您可以使用PrivateAssets元数据   控制这种行为。

<ItemGroup>
    <!-- ... -->

    <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
        <PrivateAssets>all</PrivateAssets>
    </PackageReference>

    <!-- ... -->
</ItemGroup>

因此,正如UserName所评论的那样,您可以在项目中将<PrivateAssets>all</PrivateAssets>添加到PackageReference docfx.console

要完成此操作,请修改项目文件.csproj,如下所示:

  <ItemGroup>
    <PackageReference Include="docfx.console" Version="2.36.2" PrivateAssets="All" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="docfx.console" Version="2.36.2">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
  </ItemGroup>

如果您使用的是.nuspec文件,则应在.nuspec文件中移动以下相关信息:

<dependencies>
  <dependency id="docfx.console" version="2.36.1" />
</dependencies>