繁体   English   中英

确定Visual Studio项目文件是使用旧格式还是新的.NET Core格式的最佳方法是什么?

[英]What's the best way to determine if a Visual Studio project file is using the legacy format or the new .NET Core format?

我有一个操作要对我的项目文件运行,以规范其中的XML标记的顺序(以便更轻松地查看版本控制中发生了什么变化,而不会出现由Visual Studio重新标记这些标记引起的所有误报),但仅适用于旧格式文件-它将破坏新格式的项目文件。 确定项目文件是使用旧格式还是新格式的最佳方法是什么? 我当时想我可以在根Project标记上搜索Sdk属性,并将其作为新格式的标志,但是我不知道所有新格式的项目文件都具有该属性还是可以保证该旧格式的项目文件不会...

我可以想到两种方法:

  1. 查找指示SDK风格项目的标记:
    • 如您所述, <Project Sdk="..." />是一种方法。
    • 还可以手动导入SDK道具/目标 ,以获得更大的粒度。 因此,您可能还需要检查是否存在任何<Import ... Sdk="..." />
<Project>
  <user prop here>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk/1.0.0.0" />
...
  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk/1.0.0.0" />
  <user target here>
</Project>
  1. 查找指示非SDK项目的标记。 不推荐使用或替换几个属性,因此您可以查找其中一些属性:
<!-- this is now part of the SDK, so only a non-SDK project would import it without a warning.  However, this wasn't in projects by default until VS2017 I think -->
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<!-- This is also brought in by the SDK now, and might be a more reliable indicator -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

<PropertyGroup>
  <!-- this property is deprecated -->
  <ProjectGuid>...</ProjectGuid>

  <!-- in SDK-style, this is replaced by <TargetFramework> -->
  <TargetFrameworkVersion>...</TargetFrameworkVersion>
</PropertyGroup>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM