Skip to content

Commit 296d0b8

Browse files
committed
尝试读取 .NET Framework 版本
1 parent 1561605 commit 296d0b8

1 file changed

Lines changed: 53 additions & 1 deletion

File tree

Code/UsingMSBuildCopyOutputFileToFastDebug/TargetFrameworkChecker.cs

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
using System;
22
using System.IO;
3+
using System.Text.RegularExpressions;
4+
using System.Xml.Linq;
5+
using System.Xml.XPath;
36

47
namespace UsingMSBuildCopyOutputFileToFastDebug
58
{
@@ -48,7 +51,56 @@ private static DotNetType GetExecutableFileDotNetType(FileInfo targetExecutableF
4851
return DotNetType.NetCore;
4952
}
5053

51-
return DotNetType.NetFramework;
54+
// 如果存在 config 文件,那就是 .NET Framework 的版本了
55+
return TryGetDotNetFrameworkVersion(targetExecutableFile)??DotNetType.NetFramework;
56+
}
57+
58+
private static DotNetType? TryGetDotNetFrameworkVersion(FileInfo targetExecutableFile)
59+
{
60+
var configFile = targetExecutableFile.FullName + ".config";
61+
if (!File.Exists(configFile))
62+
{
63+
return null;
64+
}
65+
66+
var xDocument = XDocument.Load(configFile);
67+
var element = xDocument.XPathSelectElement("/configuration/startup/supportedRuntime");
68+
if (element == null)
69+
{
70+
return null;
71+
}
72+
73+
var sku = element.Attribute("sku");
74+
var version = sku?.Value;
75+
var match = Regex.Match(version ?? string.Empty, @"\.NETFramework,Version=v(\S+)");
76+
if (!match.Success)
77+
{
78+
return null;
79+
}
80+
81+
var dotnet = match.Groups[1].Value;
82+
if (dotnet.Contains("4.0"))
83+
{
84+
return DotNetType.NetFramework40;
85+
}
86+
if (dotnet.Contains("4.5"))
87+
{
88+
return DotNetType.NetFramework45;
89+
}
90+
if (dotnet.Contains("4.6"))
91+
{
92+
return DotNetType.NetFramework46;
93+
}
94+
if (dotnet.Contains("4.7"))
95+
{
96+
return DotNetType.NetFramework47;
97+
}
98+
if (dotnet.Contains("4.8"))
99+
{
100+
return DotNetType.NetFramework48;
101+
}
102+
103+
return null;
52104
}
53105

54106
private static DotNetType GetTargetFrameworkDotNetType(string targetFramework)

0 commit comments

Comments
 (0)