Browse Source

Fix #3349: Get rid of version string manipulation in UniversalAssemblyResolver.ParseTargetFramework.

pull/3350/head
Siegfried Pammer 8 months ago
parent
commit
62cdf38e9b
  1. 10
      ICSharpCode.Decompiler.Tests/ProjectDecompiler/TargetFrameworkTests.cs
  2. 15
      ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

10
ICSharpCode.Decompiler.Tests/ProjectDecompiler/TargetFrameworkTests.cs

@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
using System;
using ICSharpCode.Decompiler.CSharp.ProjectDecompiler;
using ICSharpCode.Decompiler.Metadata;
using NUnit.Framework;
@ -119,5 +120,14 @@ namespace ICSharpCode.Decompiler.Tests @@ -119,5 +120,14 @@ namespace ICSharpCode.Decompiler.Tests
// Assert
Assert.That(targetFramework.Moniker, Is.EqualTo(expectedMoniker));
}
[TestCase(".NETCoreApp, Version=v5.0", TargetFrameworkIdentifier.NET, "5.0.0")]
[TestCase(".NETCoreApp, Version=v10.0", TargetFrameworkIdentifier.NET, "10.0.0")]
public void VerifyUniversalAssemblyResolverParseTargetFramework(string targetFramework, TargetFrameworkIdentifier identifier, string version)
{
var (id, v) = UniversalAssemblyResolver.ParseTargetFramework(targetFramework);
Assert.That(id, Is.EqualTo(identifier));
Assert.That(v.ToString(3), Is.EqualTo(version));
}
}
}

15
ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

@ -189,15 +189,16 @@ namespace ICSharpCode.Decompiler.Metadata @@ -189,15 +189,16 @@ namespace ICSharpCode.Decompiler.Metadata
switch (pair[0].Trim().ToUpperInvariant())
{
case "VERSION":
var versionString = pair[1].TrimStart('v', ' ', '\t');
if (identifier == TargetFrameworkIdentifier.NETCoreApp ||
identifier == TargetFrameworkIdentifier.NETStandard)
{
if (versionString.Length == 3)
versionString += ".0";
}
var versionString = pair[1].TrimStart('v', 'V', ' ', '\t');
if (!Version.TryParse(versionString, out version))
{
version = null;
}
else
{
version = new Version(version.Major, version.Minor, version.Build < 0 ? 0 : version.Build);
}
// .NET 5 or greater still use ".NETCOREAPP" as TargetFrameworkAttribute value...
if (version?.Major >= 5 && identifier == TargetFrameworkIdentifier.NETCoreApp)
identifier = TargetFrameworkIdentifier.NET;

Loading…
Cancel
Save