【问题标题】:How to exclude a package from a Class Library NuGet package?如何从类库 NuGet 包中排除包?
【发布时间】:2018-06-15 12:11:07
【问题描述】:

我有一个 .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 包?

【问题讨论】:

  • 尝试在您的项目中将&lt;PrivateAssets&gt;all&lt;/PrivateAssets&gt; 添加到PackageReference of docfx.console

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


【解决方案1】:

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

根据NuGet官方文档Controlling dependency assets

您可能将依赖项纯粹用作开发工具,并且 可能不想将它暴露给会消耗你的项目 包裹。在这种情况下,您可以使用 PrivateAssets 元数据来 控制这种行为。

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

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

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

因此,正如 UserName 评论的那样,您可以在项目中将 &lt;PrivateAssets&gt;all&lt;/PrivateAssets&gt; 添加到 PackageReferencedocfx.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>

【讨论】:

  • 虽然这成功隐藏了依赖项,但在我的情况下,我在子项目中隐藏了依赖项,然后我通过父项中的 nuget 获取子项并在子项上调用一些方法使用依赖。在这种情况下,我得到一个 TypeInitilazationEcxception,带有 System.IO.FileNotFoundException :无法加载文件或程序集'NLog ...在我的情况下,我将 Nlog 包装在我们的工具库中并调用包装器。知道如何解决这个问题吗?
猜你喜欢
  • 2021-11-18
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多