.NET标准类库不使用.nuspec
文件;在项目设置中有一个“包”选项卡,您需要在其中输入NuGet包的所有元数据,这些都在.csproj
文件中。
我想创建一个解决方案,其中包含A和B两个项目,其中B项目依赖于A项目。这两个项目都需要作为单独的NuGet包发布。但是,如果有人安装了B的NuGet包,则它也应该安装A的包。
如何为.NET标准类库指定此简单的依赖关系?我并不假设仅添加引用就足以实现此目的。
.NET标准类库不使用.nuspec
文件;在项目设置中有一个“包”选项卡,您需要在其中输入NuGet包的所有元数据,这些都在.csproj
文件中。
我想创建一个解决方案,其中包含A和B两个项目,其中B项目依赖于A项目。这两个项目都需要作为单独的NuGet包发布。但是,如果有人安装了B的NuGet包,则它也应该安装A的包。
如何为.NET标准类库指定此简单的依赖关系?我并不假设仅添加引用就足以实现此目的。
PackageReference
和ProjectReference
MSBuild项来控制从NuGet或您的解决方案中加载的软件包的依赖关系。它们都支持元数据标签PrivateAssets
,IncludeAssets
,ExcludeAssets
,用于控制项目对这些依赖项的依赖关系的具体内容和方式。默认情况下,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>
所以,我已将NuGet中的'Newtonsoft.Json'包标记为依赖项,并将ClassLibrary1项目的ProjectReference添加到单个解决方案中。当使用选中的'生成NuGet包构建'来构建SuperPackage项目时,我会得到以下SuperPackage.nupkg文件:
请查看此文档以获取更多详细信息: https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files
nuget pack
,但.nuspec
文件缺少<Dependencies>
元素。更改项目设置以在构建时生成包后,此元素将出现在.nuspec
文件中。 - Greg Burghardtdotnet
任务而不是nuget
任务来处理这些依赖项,以使其包含在nupkg结果中。 - Mike Guthrie