代码之家  ›  专栏  ›  技术社区  ›  Xpleria Dholu

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

  •  0
  • Xpleria Dholu  · 技术社区  · 7 年前

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

    现在,当另一个项目安装我的库的nuget包时, docfx.控制台 nuget包也会被安装-这是我不想要的。

    在“包”下的“项目属性”中,我选择了 生成时生成nuget包 . 这将在我构建库时自动为它生成nuget包。但是在这个选项卡中,我看不到任何可以配置为排除任何包的地方。

    所以为了排除 docfx.控制台 包中,我创建了一个.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>
    

    但没用。如何更正以排除 docfx.控制台 在构建nuget包时打包?

    或者,有没有其他方法可以排除 docfx.控制台 从Nuget包中打包?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Leo Liu    7 年前

    如何从类库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 文件中,您应该在 努斯佩克 文件:

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