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

时间:2017-03-29 19:57:32

标签: .net-core nuget-package .net-standard

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

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

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

2 个答案:

答案 0 :(得分:2)

根据我的发现,.csproj文件尚不支持,您应该使用.nuspec来指定依赖项。例如,看看它们是如何在xUnit中完成的。

答案 1 :(得分:2)

NET Standard .csproj文件分别使用PackageReferenceProjectReference MSBuild项来控制从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>

所以,我有PackageReference到&#39; Newtonsoft.Json&#39; NuGet中的包被标记为依赖项,而ProjectReference包含在单个解决方案中的ClassLibrary1项目中。 当SuperPackage项目在build&#39;上使用选中&#39; Generate NuGet包构建时,我得到以下SuperPackage.nupkg:

enter image description here

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