Browse Source

Fix DotNetCorePathFinder to properly support netstandard2.1

pull/1866/head
Siegfried Pammer 5 years ago
parent
commit
805b83f43c
  1. 2
      ICSharpCode.Decompiler/Metadata/AssemblyReferences.cs
  2. 11
      ICSharpCode.Decompiler/Metadata/DotNetCorePathFinder.cs
  3. 4
      ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

2
ICSharpCode.Decompiler/Metadata/AssemblyReferences.cs

@ -185,7 +185,7 @@ namespace ICSharpCode.Decompiler.Metadata @@ -185,7 +185,7 @@ namespace ICSharpCode.Decompiler.Metadata
{
var inst = This();
if (inst.PublicKeyOrToken.IsNil)
return Empty<byte>.Array;
return null;
var bytes = Module.Metadata.GetBlobBytes(inst.PublicKeyOrToken);
if ((inst.Flags & AssemblyFlags.PublicKey) != 0) {
return sha1.ComputeHash(bytes).Skip(12).ToArray();

11
ICSharpCode.Decompiler/Metadata/DotNetCorePathFinder.cs

@ -70,19 +70,26 @@ namespace ICSharpCode.Decompiler.Metadata @@ -70,19 +70,26 @@ namespace ICSharpCode.Decompiler.Metadata
this.version = version;
}
public DotNetCorePathFinder(string parentAssemblyFileName, string targetFrameworkId, Version version, ReferenceLoadInfo loadInfo = null)
public DotNetCorePathFinder(string parentAssemblyFileName, string targetFrameworkIdString, TargetFrameworkIdentifier targetFramework, Version version, ReferenceLoadInfo loadInfo = null)
{
string assemblyName = Path.GetFileNameWithoutExtension(parentAssemblyFileName);
string basePath = Path.GetDirectoryName(parentAssemblyFileName);
this.version = version;
if (targetFramework == TargetFrameworkIdentifier.NETStandard) {
// .NET Standard 2.1 is implemented by .NET Core 3.0 or higher
if (version.Major == 2 && version.Minor == 1) {
this.version = new Version(3, 0, 0);
}
}
var depsJsonFileName = Path.Combine(basePath, $"{assemblyName}.deps.json");
if (!File.Exists(depsJsonFileName)) {
loadInfo?.AddMessage(assemblyName, MessageKind.Warning, $"{assemblyName}.deps.json could not be found!");
return;
}
packages = LoadPackageInfos(depsJsonFileName, targetFrameworkId).ToArray();
packages = LoadPackageInfos(depsJsonFileName, targetFrameworkIdString).ToArray();
foreach (var path in LookupPaths) {
foreach (var p in packages) {

4
ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

@ -26,7 +26,7 @@ using System.Text; @@ -26,7 +26,7 @@ using System.Text;
namespace ICSharpCode.Decompiler.Metadata
{
enum TargetFrameworkIdentifier
public enum TargetFrameworkIdentifier
{
NETFramework,
NETCoreApp,
@ -183,7 +183,7 @@ namespace ICSharpCode.Decompiler.Metadata @@ -183,7 +183,7 @@ namespace ICSharpCode.Decompiler.Metadata
if (IsZeroOrAllOnes(targetFrameworkVersion))
goto default;
if (dotNetCorePathFinder == null) {
dotNetCorePathFinder = new DotNetCorePathFinder(mainAssemblyFileName, targetFramework, targetFrameworkVersion);
dotNetCorePathFinder = new DotNetCorePathFinder(mainAssemblyFileName, targetFramework, targetFrameworkIdentifier, targetFrameworkVersion);
}
file = dotNetCorePathFinder.TryResolveDotNetCore(name);
if (file != null)

Loading…
Cancel
Save