protected void RegisterAssembly (AssemblyDefinition assembly) { if (assembly == null) throw new ArgumentNullException ("assembly"); var name = assembly.Name.FullName; if (cache.ContainsKey (name)) return; cache [name] = assembly; }
public bool LoadReferences(ICollection<string> references, IErrorHandler errorHandler) { bool hasLoadErrors = false; AssemblySet assemblySet = new AssemblySet(); foreach (string referencePath in references) { string assemblyFilePath = Path.GetFullPath(referencePath); if (File.Exists(assemblyFilePath) == false) { errorHandler.ReportError("The referenced assembly '" + referencePath + "' could not be located.", String.Empty); hasLoadErrors = true; continue; } string referenceName = Path.GetFileNameWithoutExtension(assemblyFilePath); if (assemblySet.IsReferenced(referenceName)) { errorHandler.ReportError("The referenced assembly '" + referencePath + "' is a duplicate reference.", String.Empty); hasLoadErrors = true; continue; } try { AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(assemblyFilePath); if (assembly == null) { errorHandler.ReportError("The referenced assembly '" + referencePath + "' could not be loaded as an assembly.", String.Empty); hasLoadErrors = true; continue; } if (referenceName.Equals(CoreAssemblyName, StringComparison.OrdinalIgnoreCase)) { if (_coreAssemblyPath != null) { errorHandler.ReportError("The core runtime assembly, mscorlib.dll must be referenced only once.", String.Empty); hasLoadErrors = true; continue; } else { _coreAssemblyPath = assemblyFilePath; _coreAssembly = assembly; } } else { assemblySet.AddAssembly(assemblyFilePath, referenceName, assembly); } } catch (Exception e) { Debug.Fail(e.ToString()); errorHandler.ReportError("The referenced assembly '" + referencePath + "' could not be loaded as an assembly.", String.Empty); hasLoadErrors = true; } } if (_coreAssembly == null) { errorHandler.ReportError("The 'mscorlib' assembly must be referenced.", String.Empty); hasLoadErrors = true; } else { if (VerifyScriptAssembly(_coreAssembly) == false) { errorHandler.ReportError("The assembly '" + _coreAssemblyPath + "' is not a valid script assembly.", String.Empty); hasLoadErrors = true; } } foreach (KeyValuePair<string, AssemblyDefinition> assemblyReference in assemblySet.Assemblies) { if (VerifyScriptAssembly(assemblyReference.Value) == false) { errorHandler.ReportError("The assembly '" + assemblyReference.Key + "' is not a valid script assembly.", String.Empty); hasLoadErrors = true; } } _assemblyMap = assemblySet.Assemblies; _assemblyPaths = assemblySet.GetAssemblyPaths(); return hasLoadErrors; }
public void AddAssembly(string path, string referenceName, AssemblyDefinition assembly) { _assemblies[path] = assembly; _assemblyNames.Add(referenceName); }
public AssemblyReference(string path, AssemblyDefinition assembly) { _path = path; _assembly = assembly; _dependencies = assembly.MainModule.AssemblyReferences.Select(a => a.FullName).ToList(); }
private bool VerifyScriptAssembly(AssemblyDefinition assembly) { foreach (CustomAttribute attribute in assembly.CustomAttributes) { if (String.CompareOrdinal(attribute.Constructor.DeclaringType.FullName, "System.Runtime.CompilerServices.ScriptAssemblyAttribute") == 0) { return true; } } return false; }