如何在 .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 文件使用 PackageReference
和 ProjectReference
MSBuild 项分别控制对从 NuGet 或您的解决方案加载的包的依赖性。它们都支持元数据标签 PrivateAssets
、IncludeAssets
、ExcludeAssets
,这些标签控制您的项目在这些依赖项中究竟依赖什么以及如何依赖。默认情况下,所有依赖项都是 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
.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 文件使用 PackageReference
和 ProjectReference
MSBuild 项分别控制对从 NuGet 或您的解决方案加载的包的依赖性。它们都支持元数据标签 PrivateAssets
、IncludeAssets
、ExcludeAssets
,这些标签控制您的项目在这些依赖项中究竟依赖什么以及如何依赖。默认情况下,所有依赖项都是 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