Skip to content

Commit 62cdf38

Browse files
Fix icsharpcode#3349: Get rid of version string manipulation in UniversalAssemblyResolver.ParseTargetFramework.
1 parent e652490 commit 62cdf38

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

ICSharpCode.Decompiler.Tests/ProjectDecompiler/TargetFrameworkTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
using System;
2020

2121
using ICSharpCode.Decompiler.CSharp.ProjectDecompiler;
22+
using ICSharpCode.Decompiler.Metadata;
2223

2324
using NUnit.Framework;
2425

@@ -119,5 +120,14 @@ public void VerifyMoniker(string identifier, int version, string expectedMoniker
119120
// Assert
120121
Assert.That(targetFramework.Moniker, Is.EqualTo(expectedMoniker));
121122
}
123+
124+
[TestCase(".NETCoreApp, Version=v5.0", TargetFrameworkIdentifier.NET, "5.0.0")]
125+
[TestCase(".NETCoreApp, Version=v10.0", TargetFrameworkIdentifier.NET, "10.0.0")]
126+
public void VerifyUniversalAssemblyResolverParseTargetFramework(string targetFramework, TargetFrameworkIdentifier identifier, string version)
127+
{
128+
var (id, v) = UniversalAssemblyResolver.ParseTargetFramework(targetFramework);
129+
Assert.That(id, Is.EqualTo(identifier));
130+
Assert.That(v.ToString(3), Is.EqualTo(version));
131+
}
122132
}
123133
}

ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -189,15 +189,16 @@ internal static (TargetFrameworkIdentifier, Version) ParseTargetFramework(string
189189
switch (pair[0].Trim().ToUpperInvariant())
190190
{
191191
case "VERSION":
192-
var versionString = pair[1].TrimStart('v', ' ', '\t');
193-
if (identifier == TargetFrameworkIdentifier.NETCoreApp ||
194-
identifier == TargetFrameworkIdentifier.NETStandard)
195-
{
196-
if (versionString.Length == 3)
197-
versionString += ".0";
198-
}
192+
var versionString = pair[1].TrimStart('v', 'V', ' ', '\t');
193+
199194
if (!Version.TryParse(versionString, out version))
195+
{
200196
version = null;
197+
}
198+
else
199+
{
200+
version = new Version(version.Major, version.Minor, version.Build < 0 ? 0 : version.Build);
201+
}
201202
// .NET 5 or greater still use ".NETCOREAPP" as TargetFrameworkAttribute value...
202203
if (version?.Major >= 5 && identifier == TargetFrameworkIdentifier.NETCoreApp)
203204
identifier = TargetFrameworkIdentifier.NET;

0 commit comments

Comments
 (0)