首页 文章

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

提问于
浏览
0

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

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

在Package下的项目属性中,我选择了 Generate NuGet package on build . 当我构建它时,这将自动为我的库生成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 回答

  • 2

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

    根据NuGet官方文档Controlling dependency assets

    您可能仅仅将依赖项用作开发工具,并且可能不希望将其公开给将使用您的包的项目 . 在此方案中,您可以使用PrivateAssets元数据来控制此行为 . <的ItemGroup>
    <! - ... - >

    <PackageReference Include =“Contoso.Utility.UsefulStuff”Version =“3.6.0”>
    <PrivateAssets>所有</ PrivateAssets>
    </ PackageReference>

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

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

    To accomplish this ,编辑您的项目文件 .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>
    

相关问题