|
|
@ -42,7 +42,9 @@ namespace ICSharpCode.Decompiler.Metadata |
|
|
|
Mono |
|
|
|
Mono |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// This is inspired by Mono.Cecil's BaseAssemblyResolver/DefaultAssemblyResolver.
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// Used to resolve assemblies referenced by an assembly.
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
public class UniversalAssemblyResolver : AssemblyReferenceClassifier, IAssemblyResolver |
|
|
|
public class UniversalAssemblyResolver : AssemblyReferenceClassifier, IAssemblyResolver |
|
|
|
{ |
|
|
|
{ |
|
|
|
static UniversalAssemblyResolver() |
|
|
|
static UniversalAssemblyResolver() |
|
|
@ -89,6 +91,26 @@ namespace ICSharpCode.Decompiler.Metadata |
|
|
|
TargetFrameworkIdentifier targetFrameworkIdentifier; |
|
|
|
TargetFrameworkIdentifier targetFrameworkIdentifier; |
|
|
|
Version targetFrameworkVersion; |
|
|
|
Version targetFrameworkVersion; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
|
|
/// Creates a new instance of the <see cref="UniversalAssemblyResolver"/>.
|
|
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
|
|
/// <param name="mainAssemblyFileName">
|
|
|
|
|
|
|
|
/// The full path to the "main assembly" (i.e., the assembly being decompiled). This is used to
|
|
|
|
|
|
|
|
/// resolve assemblies that are located next the main assembly. If no full path is used, the resolver
|
|
|
|
|
|
|
|
/// falls back to using <see cref="Environment.CurrentDirectory"/>.
|
|
|
|
|
|
|
|
/// </param>
|
|
|
|
|
|
|
|
/// <param name="throwOnError">
|
|
|
|
|
|
|
|
/// If <see langword="true"/> an <see cref="AssemblyResolutionException"/> is thrown, in case the
|
|
|
|
|
|
|
|
/// assembly reference cannot be resolved.
|
|
|
|
|
|
|
|
/// </param>
|
|
|
|
|
|
|
|
/// <param name="targetFramework">
|
|
|
|
|
|
|
|
/// The target framework name as used by <see cref="System.Runtime.Versioning.TargetFrameworkAttribute"/>.
|
|
|
|
|
|
|
|
/// That is, "{framework},Version={version}": currently it supports ".NETCoreApp", ".NETStandard" and
|
|
|
|
|
|
|
|
/// "Silverlight", if the string doesn't match any of these, the resolver falls back to ".NET Framework",
|
|
|
|
|
|
|
|
/// which is "classic" .NET <= 4.8.
|
|
|
|
|
|
|
|
/// </param>
|
|
|
|
|
|
|
|
/// <param name="streamOptions">Options used for the <see cref="PEReader"/>.</param>
|
|
|
|
|
|
|
|
/// <param name="metadataOptions">Options used for the <see cref="MetadataReader"/>.</param>
|
|
|
|
public UniversalAssemblyResolver(string mainAssemblyFileName, bool throwOnError, string targetFramework, |
|
|
|
public UniversalAssemblyResolver(string mainAssemblyFileName, bool throwOnError, string targetFramework, |
|
|
|
PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default) |
|
|
|
PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default) |
|
|
|
{ |
|
|
|
{ |
|
|
|