从 EnvDTE.Project API 中检测到一个 dotnet 核心项目

Detect a dotnet core project from EnvDTE.Project API

我试图弄清楚当前项目(例如 dte.ActiveSolutionProjects[0])是否是 .NET 核心项目。

从csproj文件的XML看项目节点属性可以知道:

a) 普通 .NET

<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

b) donet 核心:

<Project Sdk="Microsoft.NET.Sdk">

但是如何从 Project API 中获取该信息?

我无法通过查看 MSDN 文档(它们针对 Visual Studio 2015)或在调试时探索 API 找到提示...

您应该可以使用

Project.Kind

C# .NET 项目:{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

C# dotnet 核心项目:{9A19103F-16F7-4668-BE54-9A1E7A4F7556}

自 2018 年 8 月(VS 15.8)以来,之前投票的答案不再有效。

@reduckted 向 vs 开发者社区发布了一个 link,其中 David Kean [MSFT] 发布了一个可能的解决方案:

using Microsoft.VisualStudio.Shell;

internal static bool IsCpsProject(this IVsHierarchy hierarchy)
{
  Requires.NotNull(hierarchy, "hierarchy");
  return hierarchy.IsCapabilityMatch("CPS");
}