Browse Source

Fix DotNetCorePathFinder not finding assemblies in parent assembly base path.

pull/2030/head
Siegfried Pammer 5 years ago
parent
commit
5f27fd9744
  1. 37
      ICSharpCode.Decompiler/Metadata/DotNetCorePathFinder.cs
  2. 5
      ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

37
ICSharpCode.Decompiler/Metadata/DotNetCorePathFinder.cs

@ -83,24 +83,35 @@ namespace ICSharpCode.Decompiler.Metadata
} }
} }
packageBasePaths.Add(basePath);
var depsJsonFileName = Path.Combine(basePath, $"{assemblyName}.deps.json"); var depsJsonFileName = Path.Combine(basePath, $"{assemblyName}.deps.json");
if (!File.Exists(depsJsonFileName)) { if (File.Exists(depsJsonFileName)) {
packages = LoadPackageInfos(depsJsonFileName, targetFrameworkIdString).ToArray();
foreach (var path in LookupPaths) {
foreach (var p in packages) {
foreach (var item in p.RuntimeComponents) {
var itemPath = Path.GetDirectoryName(item);
var fullPath = Path.Combine(path, p.Name, p.Version, itemPath).ToLowerInvariant();
if (Directory.Exists(fullPath))
packageBasePaths.Add(fullPath);
}
}
}
} else {
loadInfo?.AddMessage(assemblyName, MessageKind.Warning, $"{assemblyName}.deps.json could not be found!"); loadInfo?.AddMessage(assemblyName, MessageKind.Warning, $"{assemblyName}.deps.json could not be found!");
return;
} }
}
packages = LoadPackageInfos(depsJsonFileName, targetFrameworkIdString).ToArray(); public void AddSearchDirectory(string path)
{
this.packageBasePaths.Add(path);
}
foreach (var path in LookupPaths) { public void RemoveSearchDirectory(string path)
foreach (var p in packages) { {
foreach (var item in p.RuntimeComponents) { this.packageBasePaths.Remove(path);
var itemPath = Path.GetDirectoryName(item);
var fullPath = Path.Combine(path, p.Name, p.Version, itemPath).ToLowerInvariant();
if (Directory.Exists(fullPath))
packageBasePaths.Add(fullPath);
}
}
}
} }
public string TryResolveDotNetCore(IAssemblyReference name) public string TryResolveDotNetCore(IAssemblyReference name)

5
ICSharpCode.Decompiler/Metadata/UniversalAssemblyResolver.cs

@ -71,11 +71,13 @@ namespace ICSharpCode.Decompiler.Metadata
public void AddSearchDirectory(string directory) public void AddSearchDirectory(string directory)
{ {
directories.Add(directory); directories.Add(directory);
dotNetCorePathFinder?.AddSearchDirectory(directory);
} }
public void RemoveSearchDirectory(string directory) public void RemoveSearchDirectory(string directory)
{ {
directories.Remove(directory); directories.Remove(directory);
dotNetCorePathFinder?.RemoveSearchDirectory(directory);
} }
public string[] GetSearchDirectories() public string[] GetSearchDirectories()
@ -185,6 +187,9 @@ namespace ICSharpCode.Decompiler.Metadata
goto default; goto default;
if (dotNetCorePathFinder == null) { if (dotNetCorePathFinder == null) {
dotNetCorePathFinder = new DotNetCorePathFinder(mainAssemblyFileName, targetFramework, targetFrameworkIdentifier, targetFrameworkVersion); dotNetCorePathFinder = new DotNetCorePathFinder(mainAssemblyFileName, targetFramework, targetFrameworkIdentifier, targetFrameworkVersion);
foreach (var directory in directories) {
dotNetCorePathFinder.AddSearchDirectory(directory);
}
} }
file = dotNetCorePathFinder.TryResolveDotNetCore(name); file = dotNetCorePathFinder.TryResolveDotNetCore(name);
if (file != null) if (file != null)

Loading…
Cancel
Save