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

How do I specify dependencies in a .NET Standard Class Library?

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

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

如何为 .NET Standard Class 库指定这种简单的依赖关系?我不认为添加引用就足以做到这一点。

例如,根据我的发现,.csproj files and you should use .nuspec to specify dependencies. Have a look how they do it in xUnit 尚不支持它。

NET Standard .csproj 文件使用 PackageReferenceProjectReference MSBuild 项分别控制对从 NuGet 或您的解决方案加载的包的依赖性。它们都支持元数据标签 PrivateAssetsIncludeAssetsExcludeAssets,这些标签控制您的项目在这些依赖项中究竟依赖什么以及如何依赖。默认情况下,所有依赖项都是 Visual Studio 和 PrivateAssets 的 auto-generated,这意味着这些依赖项已被消耗,但它们不会被标记为项目消费者的依赖项(这将是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>

因此,我将来自 NuGet 的 PackageReference 到 'Newtonsoft.Json' 包标记为依赖项,并将 ProjectReference 标记为单个解决方案中的 ClassLibrary1 项目。 当使用选中 'Generate NuGet package on build' 构建 SuperPackage 项目时,我得到以下 SuperPackage.nupkg:

查看此文档了解更多详情:https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files