到目前为止,我一直在使用属性来控制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>
答案 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,因此它不知道您是在使用属性还是嵌套元素。