|
|
|
@ -15,35 +15,13 @@ namespace ICSharpCode.ILSpy.AddIn
@@ -15,35 +15,13 @@ namespace ICSharpCode.ILSpy.AddIn
|
|
|
|
|
{ |
|
|
|
|
public static string FindAssemblyFile(AssemblyDefinition assemblyDefinition, string assemblyFile) |
|
|
|
|
{ |
|
|
|
|
var assemblyName = assemblyDefinition.Name; |
|
|
|
|
|
|
|
|
|
var detectedTargetFramework = DetectTargetFrameworkId(assemblyDefinition, assemblyFile); |
|
|
|
|
if (string.IsNullOrEmpty(detectedTargetFramework)) { |
|
|
|
|
// Without a target framework id it makes no sense to continue
|
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var targetFramework = detectedTargetFramework.Split(new[] { ",Version=v" }, StringSplitOptions.None); |
|
|
|
|
string file = null; |
|
|
|
|
switch (targetFramework[0]) { |
|
|
|
|
case ".NETCoreApp": |
|
|
|
|
case ".NETStandard": |
|
|
|
|
if (targetFramework.Length != 2) |
|
|
|
|
return FindAssemblyFromGAC(assemblyDefinition); |
|
|
|
|
var version = targetFramework[1].Length == 3 ? new Version(targetFramework[1] + ".0") : new Version(targetFramework[1]); |
|
|
|
|
var dotNetCorePathFinder = new DotNetCorePathFinder(assemblyFile, detectedTargetFramework, version); |
|
|
|
|
file = dotNetCorePathFinder.TryResolveDotNetCore(Decompiler.Metadata.AssemblyNameReference.Parse(assemblyName.FullName)); |
|
|
|
|
if (file != null) |
|
|
|
|
return file; |
|
|
|
|
return FindAssemblyFromGAC(assemblyDefinition); |
|
|
|
|
default: |
|
|
|
|
return FindAssemblyFromGAC(assemblyDefinition); |
|
|
|
|
var assemblyResolver = new UniversalAssemblyResolver(assemblyFile, false, |
|
|
|
|
DetectTargetFrameworkId(assemblyDefinition, assemblyFile)); |
|
|
|
|
if (IsReferenceAssembly(assemblyDefinition, assemblyFile)) { |
|
|
|
|
assemblyResolver.RemoveSearchDirectory(Path.GetDirectoryName(assemblyFile)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static string FindAssemblyFromGAC(AssemblyDefinition assemblyDefinition) |
|
|
|
|
{ |
|
|
|
|
return GacInterop.FindAssemblyInNetGac(Decompiler.Metadata.AssemblyNameReference.Parse(assemblyDefinition.Name.FullName)); |
|
|
|
|
return assemblyResolver.FindAssemblyFile( |
|
|
|
|
ICSharpCode.Decompiler.Metadata.AssemblyNameReference.Parse(assemblyDefinition.Name.FullName)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static readonly string RefPathPattern = @"NuGetFallbackFolder[/\\][^/\\]+[/\\][^/\\]+[/\\]ref[/\\]"; |
|
|
|
@ -60,7 +38,7 @@ namespace ICSharpCode.ILSpy.AddIn
@@ -60,7 +38,7 @@ namespace ICSharpCode.ILSpy.AddIn
|
|
|
|
|
|
|
|
|
|
static readonly string DetectTargetFrameworkIdRefPathPattern = |
|
|
|
|
@"(Reference Assemblies[/\\]Microsoft[/\\]Framework[/\\](?<1>.NETFramework)[/\\]v(?<2>[^/\\]+)[/\\])" + |
|
|
|
|
@"|(NuGetFallbackFolder[/\\](?<1>[^/\\]+)\\(?<2>[^/\\]+)([/\\].*)?[/\\]ref[/\\])"; |
|
|
|
|
@"|((NuGetFallbackFolder|packs)[/\\](?<1>[^/\\]+)\\(?<2>[^/\\]+)([/\\].*)?[/\\]ref[/\\])"; |
|
|
|
|
|
|
|
|
|
public static string DetectTargetFrameworkId(AssemblyDefinition assembly, string assemblyPath = null) |
|
|
|
|
{ |
|
|
|
@ -85,6 +63,7 @@ namespace ICSharpCode.ILSpy.AddIn
@@ -85,6 +63,7 @@ namespace ICSharpCode.ILSpy.AddIn
|
|
|
|
|
* |
|
|
|
|
* - .NETFramework -> C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll |
|
|
|
|
* - .NETCore -> C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.netcore.app\2.1.0\ref\netcoreapp2.1\System.Console.dll |
|
|
|
|
* -> C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\3.0.0\ref\netcoreapp3.0\System.Runtime.Extensions.dll |
|
|
|
|
* - .NETStandard -> C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll |
|
|
|
|
*/ |
|
|
|
|
var pathMatch = Regex.Match(assemblyPath, DetectTargetFrameworkIdRefPathPattern, |
|
|
|
@ -95,9 +74,9 @@ namespace ICSharpCode.ILSpy.AddIn
@@ -95,9 +74,9 @@ namespace ICSharpCode.ILSpy.AddIn
|
|
|
|
|
|
|
|
|
|
if (type == ".NETFramework") { |
|
|
|
|
return $".NETFramework,Version=v{version}"; |
|
|
|
|
} else if (type.Contains("netcore")) { |
|
|
|
|
} else if (type.ToLower().Contains("netcore")) { |
|
|
|
|
return $".NETCoreApp,Version=v{version}"; |
|
|
|
|
} else if (type.Contains("netstandard")) { |
|
|
|
|
} else if (type.ToLower().Contains("netstandard")) { |
|
|
|
|
return $".NETStandard,Version=v{version}"; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|