如何处理 csproj 中的包引用的不同方法



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

两者都在控制同一件事,谁能帮助我理解差异和需要有两种方法来控制相似的东西?

对 .NET Core 的 csproj 格式的补充> 包参考

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

项目文件中的包引用 (包引用(> 控制依赖项资产:

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

这些在功能上是等效的。除了一个例外,在<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>

其他属性也是如此,如"排除资产"。

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

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

最新更新