VSIX如何判断项目是ASP.Net Core类型项目

2021-05-21  乐帮网

c# visual studio

开发Visaul Studio插件时常常会对EnvDTE.Project做一些操作,其中就包含判断项目的类型以及所有框架的版本,那么有没有办法判断当前项目是.net Framework 还是.net Core项目?
从网上找到的方法是使用 Project.Kind

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

C# dotnet Core Project: {9A19103F-16F7-4668-BE54-9A1E7A4F7556}

但是这个方法在有了dotnet core 3.0后就不再有效了。我想到了另一种代替方案如下:

public static readonly string[] APPLYSDK = { "Microsoft.NET.Sdk.Web","Microsoft.NET.Sdk","Microsoft.NET.Sdk.Razor" };

public static bool CheckSdk(EnvDTE.Project project)
{
 XmlDocument xmlDoc = new XmlDocument();
 xmlDoc.Load(project.FullName);
 XmlElement xmlRoot = xmlDoc.DocumentElement;
            if (xmlRoot.HasAttributes)
            {
                var sdkNode = xmlRoot.Attributes.GetNamedItem("Sdk");
                if (sdkNode != null)
                {
                    if (APPLYSDK.Contains(sdkNode.Value))
                    {
                        return true;
                    }
                }
            }
   return false;
}

核心原理就是通过项目的配置文件读取主要信息从而判断 它的类型,同时我们也可以把它的版本信息解析出来。

 private static string GetVersion(XmlDocument xmlDoc)
        {
            
            XmlElement xmlRoot = xmlDoc.DocumentElement;

            foreach(XmlNode node in xmlRoot.ChildNodes)
            {
                if (node.Name.Equals("PropertyGroup"))
                {
                    foreach(XmlNode property in node.ChildNodes)
                    {
                        if (property.Name.Equals("TargetFramework"))
                        {
                            return property.InnerText;
                        }
                    }
                }
            }

            return string.Empty;


        }

希望能帮助到你。lebang2020.cn

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:xinsiyu6@gmail.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力