diff --git a/corebuild/integration/ILLink.Tasks/ILLink.Tasks.targets b/corebuild/integration/ILLink.Tasks/ILLink.Tasks.targets
index 3fd4a7880e1f..ce76e7136831 100644
--- a/corebuild/integration/ILLink.Tasks/ILLink.Tasks.targets
+++ b/corebuild/integration/ILLink.Tasks/ILLink.Tasks.targets
@@ -222,7 +222,7 @@
the future we will want to generate these depending on the
scenario in which the linker is invoked. -->
- -t -l none -b true
+ -t -l none -b true --skip-unresolved true
_assemblies;
+ HashSet _unresolvedAssemblies;
+ bool _ignoreUnresolved;
+ LinkContext _context;
public IDictionary AssemblyCache {
get { return _assemblies; }
@@ -55,12 +58,32 @@ public AssemblyResolver (Dictionary assembly_cache)
_assemblies = assembly_cache;
}
+ public bool IgnoreUnresolved {
+ get { return _ignoreUnresolved; }
+ set { _ignoreUnresolved = value; }
+ }
+
+ public LinkContext Context {
+ get { return _context; }
+ set { _context = value; }
+ }
+
public override AssemblyDefinition Resolve (AssemblyNameReference name, ReaderParameters parameters)
{
- AssemblyDefinition asm;
- if (!_assemblies.TryGetValue (name.Name, out asm)) {
- asm = base.Resolve (name, parameters);
- _assemblies [asm.Name.Name] = asm;
+ AssemblyDefinition asm = null;
+ if (!_assemblies.TryGetValue (name.Name, out asm) && (_unresolvedAssemblies == null || !_unresolvedAssemblies.Contains (name.Name))) {
+ try {
+ asm = base.Resolve (name, parameters);
+ _assemblies [name.Name] = asm;
+ } catch (AssemblyResolutionException) {
+ if (!_ignoreUnresolved)
+ throw;
+
+ _context.LogMessage ($"warning: unresolved assembly {name.Name}");
+ if (_unresolvedAssemblies == null)
+ _unresolvedAssemblies = new HashSet ();
+ _unresolvedAssemblies.Add (name.Name);
+ }
}
return asm;
@@ -80,6 +103,8 @@ protected override void Dispose (bool disposing)
}
_assemblies.Clear ();
+ if (_unresolvedAssemblies != null)
+ _unresolvedAssemblies.Clear ();
}
}
}
diff --git a/linker/Linker/Driver.cs b/linker/Linker/Driver.cs
index 26ebe038e938..35f03edf63ba 100644
--- a/linker/Linker/Driver.cs
+++ b/linker/Linker/Driver.cs
@@ -106,7 +106,9 @@ public void Run (ILogger customLogger = null)
Usage ("Option is too short");
if (token == "--skip-unresolved") {
- context.IgnoreUnresolved = bool.Parse (GetParam ());
+ bool ignoreUnresolved = bool.Parse (GetParam ());
+ context.IgnoreUnresolved = ignoreUnresolved;
+ context.Resolver.IgnoreUnresolved = ignoreUnresolved;
continue;
}
@@ -343,7 +345,7 @@ static void Usage (string msg)
Console.WriteLine (" --about About the {0}", _linker);
Console.WriteLine (" --version Print the version number of the {0}", _linker);
- Console.WriteLine (" --skip-unresolved Ignore unresolved types and methods (true or false)");
+ Console.WriteLine (" --skip-unresolved Ignore unresolved types, methods, and assemblies (true or false)");
Console.WriteLine (" --dependencies-file Specify the dependencies file path, if unset the default path is used: