[mcs] Allow to set any metadata version
[mono.git] / mcs / mcs / ikvm.cs
index 1a74b3148e5014df63adc4a1c3f7154b086352e2..e5d14df79798d71cbdd95e20a631790b68b98603 100644 (file)
@@ -189,6 +189,8 @@ namespace Mono.CSharp
                {
                        if (loader.Corlib != null && !(loader.Corlib is AssemblyBuilder)) {
                                Builder.__SetImageRuntimeVersion (loader.Corlib.ImageRuntimeVersion, 0x20000);
+                       } else if (module.Compiler.Settings.RuntimeMetadataVersion != null) {
+                               Builder.__SetImageRuntimeVersion (module.Compiler.Settings.RuntimeMetadataVersion, 0x20000);
                        } else {
                                // Sets output file metadata version when there is no mscorlib
                                switch (module.Compiler.Settings.StdLibRuntimeVersion) {
@@ -285,6 +287,8 @@ namespace Mono.CSharp
                        }
                }
 
+               public AssemblyDefinitionStatic CompiledAssembly {  get; set; }
+
                public Universe Domain {
                        get {
                                return domain;
@@ -368,6 +372,14 @@ namespace Mono.CSharp
                                return version_mismatch;
                        }
 
+                       //
+                       // Recursive reference to compiled assembly checks name only. Any other
+                       // details (PublicKey, Version, etc) are not yet known hence cannot be checked
+                       //
+                       ParsedAssemblyName referenced_assembly;
+                       if (Fusion.ParseAssemblyName (args.Name, out referenced_assembly) == ParseAssemblyResult.OK && CompiledAssembly.Name == referenced_assembly.Name)
+                               return CompiledAssembly.Builder;
+
                        // AssemblyReference has not been found in the domain
                        // create missing reference and continue
                        return domain.CreateMissingAssembly (args.Name);