Merge pull request #823 from DavidKarlas/master
[mono.git] / mcs / mcs / ikvm.cs
index 7164a7c3ae3e116ba01b4bf170e01ffbca94f2df..1a74b3148e5014df63adc4a1c3f7154b086352e2 100644 (file)
@@ -91,17 +91,21 @@ namespace Mono.CSharp
 
                public void ImportAssembly (Assembly assembly, RootNamespace targetNamespace)
                {
-                       // It can be used more than once when importing same assembly
-                       // into 2 or more global aliases
-                       // TODO: Should be just Add
-                       GetAssemblyDefinition (assembly);
-
-                       var all_types = assembly.GetTypes ();
-                       ImportTypes (all_types, targetNamespace, true);
-
-                       all_types = assembly.ManifestModule.__GetExportedTypes ();
-                       if (all_types.Length != 0)
-                               ImportForwardedTypes (all_types, targetNamespace);
+                       try {
+                               // It can be used more than once when importing same assembly
+                               // into 2 or more global aliases
+                               // TODO: Should be just Add
+                               GetAssemblyDefinition (assembly);
+
+                               var all_types = assembly.GetTypes ();
+                               ImportTypes (all_types, targetNamespace, true);
+
+                               all_types = assembly.ManifestModule.__GetExportedTypes ();
+                               if (all_types.Length != 0)
+                                       ImportForwardedTypes (all_types, targetNamespace);
+                       } catch (Exception e) {
+                               throw new InternalErrorException (e, "Failed to import assembly `{0}'", assembly.FullName);
+                       }
                }
 
                public ImportedModuleDefinition ImportModule (Module module, RootNamespace targetNamespace)
@@ -120,6 +124,9 @@ namespace Mono.CSharp
                        Namespace ns = targetNamespace;
                        string prev_namespace = null;
                        foreach (var t in types) {
+                               if (!t.__IsTypeForwarder)
+                                       continue;
+
                                // IsMissing tells us the type has been forwarded and target assembly is missing 
                                if (!t.__IsMissing)
                                        continue;
@@ -222,7 +229,7 @@ namespace Mono.CSharp
                readonly StaticImporter importer;
                readonly Universe domain;
                Assembly corlib;
-               List<Tuple<AssemblyName, string, Assembly>> loaded_names;
+               readonly List<Tuple<AssemblyName, string, Assembly>> loaded_names;
                static readonly Dictionary<string, string[]> sdk_directory;
 
                static StaticLoader ()
@@ -237,8 +244,7 @@ namespace Mono.CSharp
                        : base (compiler)
                {
                        this.importer = importer;
-                       domain = new Universe ();
-                       domain.EnableMissingMemberResolution ();
+                       domain = new Universe (UniverseOptions.MetadataOnly | UniverseOptions.ResolveMissingMembers | UniverseOptions.DisableFusion);
                        domain.AssemblyResolve += AssemblyReferenceResolver;
                        loaded_names = new List<Tuple<AssemblyName, string, Assembly>> ();
 
@@ -304,7 +310,7 @@ namespace Mono.CSharp
 
                        foreach (var assembly in domain.GetAssemblies ()) {
                                AssemblyComparisonResult result;
-                               if (!Fusion.CompareAssemblyIdentityPure (refname, false, assembly.FullName, false, out result)) {
+                               if (!domain.CompareAssemblyIdentity (refname, false, assembly.FullName, false, out result)) {
                                        if ((result == AssemblyComparisonResult.NonEquivalentVersion || result == AssemblyComparisonResult.NonEquivalentPartialVersion) &&
                                                (version_mismatch == null || version_mismatch.GetName ().Version < assembly.GetName ().Version) &&
                                                !is_fx_assembly) {