示例#1
0
        public bool Add(string assemblyPath)
        {
            if (assemblyPath == null)
            {
                throw new ArgumentNullException("assemblyPath");
            }

            FileInfo assemblyFile = new FileInfo(assemblyPath);

            if (!assemblyFile.Exists)
            {
                throw new FileNotFoundException();
            }

            try
            {
                using (AssemblyReflectionManager reflectionManager = new AssemblyReflectionManager())
                {
                    lock (this.assemblyPaths)
                    {
                        if (this.pathAssembly.ContainsKey(assemblyPath))
                        {
                            throw new ArgumentException(Resources.AssemblyAlreadyAdded);
                        }

                        if (reflectionManager.LoadAssembly(assemblyFile.FullName))
                        {
                            var assemblyName = reflectionManager.Reflect(assemblyFile.FullName, assembly => assembly.FullName);
                            AddPathToName(assemblyName, assemblyFile.FullName);

                            this.log.Info(Resources.AssemblyAdded, assemblyFile.FullName);

                            if (this.AssemblyAdded != null)
                            {
                                this.AssemblyAdded(this, new AssemblyAddedEventArgs(assemblyFile.FullName, reflectionManager));
                            }

                            return(true);
                        }
                    }
                }
            }
            catch (BadImageFormatException) { }
            catch (FileLoadException) { }

            return(false);
        }
示例#2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AssemblyAddedEventArgs"/> class.
 /// </summary>
 /// <param name="id">The assembly id.</param>
 /// <param name="reflectionManager">The reflection manager.</param>
 public AssemblyAddedEventArgs(string id, AssemblyReflectionManager reflectionManager)
 {
     this.AssemblyId        = id;
     this.reflectionManager = reflectionManager;
 }