X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fikvm.cs;h=4ed8cf62a4ecb7bc49e9684521b0fb0176b981b5;hb=1684cfd594fd074d62e6be9caf1544d340e95941;hp=c2e247037ef2f62e9ad16ca51a0b16f0ef2674dd;hpb=6bc565c1f7e7fd9aaf6ee6a141ea18479a316ac4;p=mono.git diff --git a/mcs/mcs/ikvm.cs b/mcs/mcs/ikvm.cs index c2e247037ef..4ed8cf62a4e 100644 --- a/mcs/mcs/ikvm.cs +++ b/mcs/mcs/ikvm.cs @@ -220,6 +220,11 @@ namespace Mono.CSharp return Builder.__AddModule (moduleFile); } + protected override List GetNotUnifiedReferences (AssemblyName assemblyName) + { + return loader.GetNotUnifiedReferences (assemblyName); + } + protected override void SaveModule (PortableExecutableKinds pekind, ImageFileMachine machine) { module.Builder.__Save (pekind, machine); @@ -233,20 +238,24 @@ namespace Mono.CSharp Assembly corlib; readonly List> loaded_names; static readonly Dictionary sdk_directory; + Dictionary> resolved_version_mismatches; static StaticLoader () { sdk_directory = new Dictionary (); sdk_directory.Add ("2", new string[] { "2.0", "net_2_0", "v2.0.50727" }); sdk_directory.Add ("4", new string[] { "4.0", "net_4_0", "v4.0.30319" }); - sdk_directory.Add ("4.5", new string[] { "4.5", "net_4_5", "v4.0.30319" }); + sdk_directory.Add ("4.5", new string[] { "4.5", "net_4_x", "v4.0.30319" }); } public StaticLoader (StaticImporter importer, CompilerContext compiler) : base (compiler) { this.importer = importer; - domain = new Universe (UniverseOptions.MetadataOnly | UniverseOptions.ResolveMissingMembers | UniverseOptions.DisableFusion); + domain = new Universe (UniverseOptions.MetadataOnly | UniverseOptions.ResolveMissingMembers | + UniverseOptions.DisableFusion | UniverseOptions.DecodeVersionInfoAttributeBlobs | + UniverseOptions.DeterministicOutput); + domain.AssemblyResolve += AssemblyReferenceResolver; loaded_names = new List> (); @@ -350,11 +359,23 @@ namespace Mono.CSharp var v2 = version_mismatch.GetName ().Version; if (v1 > v2) { -// compiler.Report.SymbolRelatedToPreviousError (args.RequestingAssembly.Location); - compiler.Report.Error (1705, "Assembly `{0}' references `{1}' which has a higher version number than imported assembly `{2}'", - args.RequestingAssembly.FullName, refname, version_mismatch.GetName ().FullName); + if (resolved_version_mismatches == null) + resolved_version_mismatches = new Dictionary> (); + + var an = args.RequestingAssembly.GetName (); + List names; + if (!resolved_version_mismatches.TryGetValue (an, out names)) { + names = new List (); + resolved_version_mismatches.Add (an, names); + } + + names.Add (new[] { + args.RequestingAssembly.Location, + string.Format ("Assembly `{0}' depends on `{1}' which has a higher version number than referenced assembly `{2}'", + args.RequestingAssembly.FullName, refname, version_mismatch.GetName ().FullName) + }); - return domain.CreateMissingAssembly (args.Name); + return version_mismatch; } if (!is_fx_assembly) { @@ -409,9 +430,22 @@ namespace Mono.CSharp return default_references.ToArray (); } + public List GetNotUnifiedReferences (AssemblyName assemblyName) + { + List list = null; + if (resolved_version_mismatches != null) + resolved_version_mismatches.TryGetValue (assemblyName, out list); + + return list; + } + public override bool HasObjectType (Assembly assembly) { - return assembly.GetType (compiler.BuiltinTypes.Object.FullName) != null; + try { + return assembly.GetType (compiler.BuiltinTypes.Object.FullName) != null; + } catch (Exception e) { + throw new InternalErrorException (e, "Failed to load assembly `{0}'", assembly.FullName); + } } public override Assembly LoadAssemblyFile (string fileName, bool isImplicitReference) @@ -583,7 +617,25 @@ namespace Mono.CSharp public override void DefineWin32IconResource (string fileName) { - builder.__DefineIconResource (File.ReadAllBytes (fileName)); + byte[] bytes; + try { + bytes = File.ReadAllBytes (fileName); + } catch (Exception e) { + ctx.Report.Error (7064, Location.Null, "Error opening icon file `{0}'. {1}", fileName, e.Message); + return; + } + + builder.__DefineIconResource (bytes); + } + + public override AssemblyName[] GetReferencedAssemblies () + { + foreach (var m in builder.Modules) { + if (m is ModuleBuilder) + return m.__GetReferencedAssemblies (); + } + + return new AssemblyName [0]; } public override void SetAlgorithmId (uint value, Location loc)