Trying resolving System.Runtime types to mscorlib
This works around what seems to be missing entries in the SDK. Fixes #98
This commit is contained in:
parent
6b3581bb6c
commit
0877dfb7df
|
@ -133,8 +133,12 @@ namespace Ooui.Wasm.Build.Tasks
|
|||
var asmPath = Path.GetFullPath (Assembly);
|
||||
|
||||
var pipeline = GetLinkerPipeline ();
|
||||
var resolver = new AsmResolver (this);
|
||||
using (var context = new LinkContext (pipeline, resolver)) {
|
||||
var resolver = new LinkerAssemblyResolver (this);
|
||||
var asmParameters = new ReaderParameters {
|
||||
AssemblyResolver = resolver,
|
||||
MetadataResolver = new LinkerMetadataResolver (resolver)
|
||||
};
|
||||
using (var context = new LinkContext (pipeline, resolver, asmParameters, new UnintializedContextFactory ())) {
|
||||
context.CoreAction = AssemblyAction.CopyUsed;
|
||||
context.UserAction = AssemblyAction.CopyUsed;
|
||||
context.OutputDirectory = managedPath;
|
||||
|
@ -341,11 +345,11 @@ namespace Ooui.Wasm.Build.Tasks
|
|||
Log.LogMessage ($"HTML {htmlPath}");
|
||||
}
|
||||
|
||||
class AsmResolver : Mono.Linker.AssemblyResolver
|
||||
class LinkerAssemblyResolver : Mono.Linker.AssemblyResolver
|
||||
{
|
||||
BuildDistTask task;
|
||||
|
||||
public AsmResolver (BuildDistTask buildDistTask)
|
||||
public LinkerAssemblyResolver (BuildDistTask buildDistTask)
|
||||
{
|
||||
task = buildDistTask;
|
||||
}
|
||||
|
@ -369,5 +373,38 @@ namespace Ooui.Wasm.Build.Tasks
|
|||
return asm;
|
||||
}
|
||||
}
|
||||
|
||||
class LinkerMetadataResolver : MetadataResolver
|
||||
{
|
||||
LinkerAssemblyResolver resolver;
|
||||
|
||||
readonly AssemblyNameReference mscorlibScope = new AssemblyNameReference ("mscorlib", new Version (1, 0));
|
||||
|
||||
public LinkerMetadataResolver (LinkerAssemblyResolver asmResolver)
|
||||
: base (asmResolver)
|
||||
{
|
||||
}
|
||||
|
||||
public override TypeDefinition Resolve (TypeReference type)
|
||||
{
|
||||
var def = base.Resolve (type);
|
||||
if (def != null) return def;
|
||||
|
||||
var scope = type.Scope;
|
||||
if (scope == null) return null;
|
||||
|
||||
switch (scope.MetadataScopeType) {
|
||||
case MetadataScopeType.AssemblyNameReference: {
|
||||
AssemblyNameReference asmRef = (AssemblyNameReference)scope;
|
||||
if (asmRef.Name == "System.Runtime") {
|
||||
return base.Resolve (new TypeReference (type.Namespace, type.Name, type.Module, mscorlibScope));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return def;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue