Zde*_*něk 0 c# csproj .net-core
到目前为止,我一直使用属性来控制PackageReference
(第一个示例)的资产依赖性。最近,在使用 NuGet 包管理器(在 VS 中)之后,我最终得到了完全不同的 XML。
两者都控制相同的东西,任何人都可以帮助我理解差异和需要有两种方法来控制类似的东西吗?
.NET Core 的 csproj 格式的新增内容 > PackageReference
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" PrivateAssets="..." IncludeAssets="..." ExcludeAssets="..." />
Run Code Online (Sandbox Code Playgroud)
项目文件中的包引用 (PackageReference) > 控制依赖项资产:
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
<IncludeAssets>...</IncludeAssets>
<ExcludeAssets>...</ExcludeAssets>
<PrivateAssets>...</PrivateAssets>
</PackageReference>
Run Code Online (Sandbox Code Playgroud)
它们在功能上是等效的。除了一个例外,在<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>
Run Code Online (Sandbox Code Playgroud)
其他属性(例如“ExcludeAsset”)也是如此。
在使用 NuGet 包管理器(在 VS 中)之后,我最终得到了完全不同的 XML。
VS 中的 NuGet 包管理器在对文档进行修改时不遵循文档的原始格式<PackageReference>
。NuGet 可能正在获取.csproj 文件的解释结果,而不是原始 XML,因此它不知道您是否使用了属性或嵌套元素。