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
关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com
庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。
如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力