如何在 .NET Standard 类库中指定依赖项?

Gig*_*igi 8 nuget-package .net-core .net-standard

.NET 标准类库不使用.nuspec文件;项目设置中有一个“包”选项卡,您可以在其中输入 NuGet 包的所有元数据。这些都在.csproj文件中。

我想创建一个包含项目 A 和 B 的解决方案,其中项目 B 依赖于项目 A。两者都需要作为单独的包在 NuGet 上运行。但是如果有人为 B 安装了 NuGet 包,它也应该为 A 安装包。

您如何为 .NET 标准类库指定这个简单的依赖项?我不认为添加引用就足以做到这一点。

Hen*_*dii 7

NET Standard .csproj 文件使用MSBuild 项PackageReferenceProjectReference分别控制从 NuGet 或解决方案加载的包的依赖关系。它们都支持元数据标签PrivateAssetsIncludeAssetsExcludeAssets,这些标签控制您的项目在这些依赖项中到底依赖什么以及如何依赖。默认情况下,所有依赖项均由 Visual Studio 使用 来自动生成PrivateAssets,这意味着这些依赖项已被使用,但它们不会被标记为项目使用者的依赖项(这将是 NuGet 中的包)。因此,您只需将PrivateAssets元数据替换为IncludeAssets(也许使用正确的值)。例如,我的 SuperPackage.csproj 文件如下所示:

..................
  <ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.6.0">
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Newtonsoft.Json" Version="11.0.2">
      <IncludeAssets>compile</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj">
      <IncludeAssets>compile</IncludeAssets>
    </ProjectReference>
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

因此,我将PackageReferenceNuGet 中的“Newtonsoft.Json”包标记为依赖项,并将ProjectReference单个解决方案中的 ClassLibrary1 项目标记为依赖项。当使用选中的“在构建时生成 NuGet 包”来构建 SuperPackage 项目时,我得到以下 SuperPackage.nupkg:

在此输入图像描述

检查此文档了解更多详细信息:https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files


And*_*nov 2

据我发现, .csproj文件尚不支持它,您应该使用.nuspec来指定依赖项。例如,看看他们如何在xUnit中做到这一点。