如何处理CSPROJ中的套件参考的不同方式

时间:2018-10-22 12:15:09

标签: c# .net-core csproj

到目前为止,我一直在使用属性来控制PackageReference的资产依赖关系(第一个示例)。最近,在使用NuGet软件包管理器(在VS中)之后,我最终得到了完全不同的XML。

两者都在控制相同的事物,有人可以帮助我理解差异以及需要两种方法来控制相似的事物吗?

Additions to the csproj format for .NET Core > PackageReference

<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" PrivateAssets="..." IncludeAssets="..." ExcludeAssets="..." />

Package references (PackageReference) in project files > Controlling dependency assets

<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
    <IncludeAssets>...</IncludeAssets>
    <ExcludeAssets>...</ExcludeAssets>
    <PrivateAssets>...</PrivateAssets>
</PackageReference>

1 个答案:

答案 0 :(得分:2)

这些在功能上是等效的。除了一个例外,在<PackageReference>元素上使用属性是使嵌套元素具有相同名称的捷径。 Include属性是一个例外,它不能是嵌套元素。

因此,Visual Studio,MSBuild,NuGet等将对它们进行相同的处理:

<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
<PackageReference Include="Contoso.Utility.UsefulStuff">
  <Version>3.6.0</Version>
</PackageReference>

“ ExcludeAsset”等其他属性也是如此。

  

在使用VS中的NuGet程序包管理器后,我最终得到了完全不同的XML。

VS对您的<PackageReference>进行修改时,VS中的NuGet程序包管理器不遵守该文档的原始格式。 NuGet可能正在获取.csproj文件的解释后的结果,而不是原始XML,因此它不知道您是在使用属性还是嵌套元素。