Browse Source

Merge branch '5.0.x'

pull/1728/head
Andreas Weizel 7 years ago
parent
commit
000b585bcb
  1. 41
      ILSpy.AddIn/AssemblyFileFinder.cs
  2. 4
      ILSpy.AddIn/Commands/OpenCodeItemCommand.cs
  3. 5
      ILSpy.AddIn/Commands/OpenILSpyCommand.cs

41
ILSpy.AddIn/AssemblyFileFinder.cs

@ -15,35 +15,13 @@ namespace ICSharpCode.ILSpy.AddIn
{ {
public static string FindAssemblyFile(AssemblyDefinition assemblyDefinition, string assemblyFile) public static string FindAssemblyFile(AssemblyDefinition assemblyDefinition, string assemblyFile)
{ {
var assemblyName = assemblyDefinition.Name; var assemblyResolver = new UniversalAssemblyResolver(assemblyFile, false,
DetectTargetFrameworkId(assemblyDefinition, assemblyFile));
var detectedTargetFramework = DetectTargetFrameworkId(assemblyDefinition, assemblyFile); if (IsReferenceAssembly(assemblyDefinition, assemblyFile)) {
if (string.IsNullOrEmpty(detectedTargetFramework)) { assemblyResolver.RemoveSearchDirectory(Path.GetDirectoryName(assemblyFile));
// 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);
} }
} return assemblyResolver.FindAssemblyFile(
ICSharpCode.Decompiler.Metadata.AssemblyNameReference.Parse(assemblyDefinition.Name.FullName));
static string FindAssemblyFromGAC(AssemblyDefinition assemblyDefinition)
{
return GacInterop.FindAssemblyInNetGac(Decompiler.Metadata.AssemblyNameReference.Parse(assemblyDefinition.Name.FullName));
} }
static readonly string RefPathPattern = @"NuGetFallbackFolder[/\\][^/\\]+[/\\][^/\\]+[/\\]ref[/\\]"; static readonly string RefPathPattern = @"NuGetFallbackFolder[/\\][^/\\]+[/\\][^/\\]+[/\\]ref[/\\]";
@ -60,7 +38,7 @@ namespace ICSharpCode.ILSpy.AddIn
static readonly string DetectTargetFrameworkIdRefPathPattern = static readonly string DetectTargetFrameworkIdRefPathPattern =
@"(Reference Assemblies[/\\]Microsoft[/\\]Framework[/\\](?<1>.NETFramework)[/\\]v(?<2>[^/\\]+)[/\\])" + @"(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) public static string DetectTargetFrameworkId(AssemblyDefinition assembly, string assemblyPath = null)
{ {
@ -85,6 +63,7 @@ namespace ICSharpCode.ILSpy.AddIn
* *
* - .NETFramework -> C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll * - .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 * - .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 * - .NETStandard -> C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll
*/ */
var pathMatch = Regex.Match(assemblyPath, DetectTargetFrameworkIdRefPathPattern, var pathMatch = Regex.Match(assemblyPath, DetectTargetFrameworkIdRefPathPattern,
@ -95,9 +74,9 @@ namespace ICSharpCode.ILSpy.AddIn
if (type == ".NETFramework") { if (type == ".NETFramework") {
return $".NETFramework,Version=v{version}"; return $".NETFramework,Version=v{version}";
} else if (type.Contains("netcore")) { } else if (type.ToLower().Contains("netcore")) {
return $".NETCoreApp,Version=v{version}"; return $".NETCoreApp,Version=v{version}";
} else if (type.Contains("netstandard")) { } else if (type.ToLower().Contains("netstandard")) {
return $".NETStandard,Version=v{version}"; return $".NETStandard,Version=v{version}";
} }
} }

4
ILSpy.AddIn/Commands/OpenCodeItemCommand.cs

@ -77,6 +77,10 @@ namespace ICSharpCode.ILSpy.AddIn.Commands
SnapshotPoint caretPosition = textView.Caret.Position.BufferPosition; SnapshotPoint caretPosition = textView.Caret.Position.BufferPosition;
var roslynDocument = GetRoslynDocument(); var roslynDocument = GetRoslynDocument();
if (roslynDocument == null) {
owner.ShowMessage("This element is not analyzable in current view.");
return;
}
var ast = await roslynDocument.GetSyntaxRootAsync().ConfigureAwait(false); var ast = await roslynDocument.GetSyntaxRootAsync().ConfigureAwait(false);
var model = await roslynDocument.GetSemanticModelAsync().ConfigureAwait(false); var model = await roslynDocument.GetSemanticModelAsync().ConfigureAwait(false);
var node = ast.FindNode(new TextSpan(caretPosition.Position, 0), false, true); var node = ast.FindNode(new TextSpan(caretPosition.Position, 0), false, true);

5
ILSpy.AddIn/Commands/OpenILSpyCommand.cs

@ -79,14 +79,9 @@ namespace ICSharpCode.ILSpy.AddIn.Commands
foreach (var reference in parentProject.MetadataReferences) { foreach (var reference in parentProject.MetadataReferences) {
using (var assemblyDef = AssemblyDefinition.ReadAssembly(reference.Display)) { using (var assemblyDef = AssemblyDefinition.ReadAssembly(reference.Display)) {
string assemblyName = assemblyDef.Name.Name; string assemblyName = assemblyDef.Name.Name;
if (AssemblyFileFinder.IsReferenceAssembly(assemblyDef, reference.Display)) {
string resolvedAssemblyFile = AssemblyFileFinder.FindAssemblyFile(assemblyDef, reference.Display); string resolvedAssemblyFile = AssemblyFileFinder.FindAssemblyFile(assemblyDef, reference.Display);
dict.Add(assemblyName, dict.Add(assemblyName,
new DetectedReference(assemblyName, resolvedAssemblyFile, false)); new DetectedReference(assemblyName, resolvedAssemblyFile, false));
} else {
dict.Add(assemblyName,
new DetectedReference(assemblyName, reference.Display, false));
}
} }
} }
foreach (var projectReference in parentProject.ProjectReferences) { foreach (var projectReference in parentProject.ProjectReferences) {

Loading…
Cancel
Save