public void RunRegistrar() { // The static registrar. if (Registrar != RegistrarMode.Static) { throw new PlatformException(67, "Invalid registrar: {0}", Registrar); // this is only called during our own build } if (RootAssemblies.Count < 1) { throw ErrorHelper.CreateError(130, "No root assemblies found. You should provide at least one root assembly."); } var registrar_m = RegistrarOutputLibrary; var RootAssembly = RootAssemblies [0]; var resolvedAssemblies = new Dictionary <string, AssemblyDefinition> (); var resolver = new PlatformResolver() { FrameworkDirectory = Driver.GetPlatformFrameworkDirectory(this), RootDirectory = Path.GetDirectoryName(RootAssembly), #if MMP CommandLineAssemblies = RootAssemblies, #endif }; if (Platform == ApplePlatform.iOS || Platform == ApplePlatform.MacOSX) { if (Is32Build) { resolver.ArchDirectory = Driver.GetArch32Directory(this); } else { resolver.ArchDirectory = Driver.GetArch64Directory(this); } } var ps = new ReaderParameters(); ps.AssemblyResolver = resolver; resolvedAssemblies.Add("mscorlib", ps.AssemblyResolver.Resolve(AssemblyNameReference.Parse("mscorlib"), new ReaderParameters())); var productAssembly = Driver.GetProductAssembly(this); bool foundProductAssembly = false; foreach (var asm in RootAssemblies) { var rootName = Path.GetFileNameWithoutExtension(asm); if (rootName == productAssembly) { foundProductAssembly = true; } try { AssemblyDefinition lastAssembly = ps.AssemblyResolver.Resolve(AssemblyNameReference.Parse(rootName), new ReaderParameters()); if (lastAssembly == null) { ErrorHelper.CreateWarning(7, "The root assembly '{0}' does not exist", rootName); continue; } if (resolvedAssemblies.TryGetValue(rootName, out var previousAssembly)) { if (lastAssembly.MainModule.RuntimeVersion != previousAssembly.MainModule.RuntimeVersion) { Driver.Log(2, "Attemping to load an assembly another time {0} (previous {1})", lastAssembly.FullName, previousAssembly.FullName); } continue; } resolvedAssemblies.Add(rootName, lastAssembly); Driver.Log(3, "Loaded {0}", lastAssembly.MainModule.FileName); } catch (Exception ex) { ErrorHelper.Warning(9, ex, "Error while loading assemblies: {0}: {1}", rootName, ex.Message); continue; } } if (!foundProductAssembly) { throw ErrorHelper.CreateError(131, "Product assembly '{0}' not found in assembly list: '{1}'", productAssembly, string.Join("', '", RootAssemblies.ToArray())); } #if MONOTOUCH BuildTarget = BuildTarget.Simulator; #endif var registrar = new Registrar.StaticRegistrar(this); if (RootAssemblies.Count == 1) { registrar.GenerateSingleAssembly(resolvedAssemblies.Values, Path.ChangeExtension(registrar_m, "h"), registrar_m, Path.GetFileNameWithoutExtension(RootAssembly)); } else { registrar.Generate(resolvedAssemblies.Values, Path.ChangeExtension(registrar_m, "h"), registrar_m); } }
public void RunRegistrar() { // The static registrar. if (Registrar != RegistrarMode.Static) { throw new ProductException(67, Errors.MT0067, Registrar); // this is only called during our own build } if (RootAssemblies.Count < 1) { throw ErrorHelper.CreateError(130, Errors.MX0130); } var registrar_m = RegistrarOutputLibrary; var RootAssembly = RootAssemblies [0]; var resolvedAssemblies = new Dictionary <string, AssemblyDefinition> (); var resolver = new PlatformResolver() { RootDirectory = Path.GetDirectoryName(RootAssembly), #if MMP CommandLineAssemblies = RootAssemblies, #endif }; if (Platform == ApplePlatform.iOS && !Driver.IsDotNet) { if (Is32Build) { resolver.ArchDirectory = Driver.GetArch32Directory(this); } else { resolver.ArchDirectory = Driver.GetArch64Directory(this); } } var ps = new ReaderParameters(); ps.AssemblyResolver = resolver; foreach (var reference in References) { var r = resolver.Load(reference); if (r == null) { throw ErrorHelper.CreateError(2002, Errors.MT2002, reference); } } var productAssembly = Driver.GetProductAssembly(this); bool foundProductAssembly = false; foreach (var asm in RootAssemblies) { var rootName = Path.GetFileNameWithoutExtension(asm); if (rootName == productAssembly) { foundProductAssembly = true; } try { AssemblyDefinition lastAssembly = ps.AssemblyResolver.Resolve(AssemblyNameReference.Parse(rootName), new ReaderParameters()); if (lastAssembly == null) { ErrorHelper.CreateWarning(7, Errors.MX0007, rootName); continue; } if (resolvedAssemblies.TryGetValue(rootName, out var previousAssembly)) { if (lastAssembly.MainModule.RuntimeVersion != previousAssembly.MainModule.RuntimeVersion) { Driver.Log(2, "Attemping to load an assembly another time {0} (previous {1})", lastAssembly.FullName, previousAssembly.FullName); } continue; } resolvedAssemblies.Add(rootName, lastAssembly); Driver.Log(3, "Loaded {0}", lastAssembly.MainModule.FileName); } catch (Exception ex) { ErrorHelper.Warning(9, ex, Errors.MX0009, $"{rootName}: {ex.Message}"); continue; } } if (!foundProductAssembly) { throw ErrorHelper.CreateError(131, Errors.MX0131, productAssembly, string.Join("', '", RootAssemblies.ToArray())); } #if MONOTOUCH if (SelectAbis(Abis, Abi.SimulatorArchMask).Count > 0) { BuildTarget = BuildTarget.Simulator; } else if (SelectAbis(Abis, Abi.DeviceArchMask).Count > 0) { BuildTarget = BuildTarget.Device; } else { throw ErrorHelper.CreateError(99, Errors.MX0099, "No valid ABI"); } #endif var registrar = new Registrar.StaticRegistrar(this); if (RootAssemblies.Count == 1) { registrar.GenerateSingleAssembly(resolver, resolvedAssemblies.Values, Path.ChangeExtension(registrar_m, "h"), registrar_m, Path.GetFileNameWithoutExtension(RootAssembly)); } else { registrar.Generate(resolvedAssemblies.Values, Path.ChangeExtension(registrar_m, "h"), registrar_m); } }