/// <summary> /// Tenta carregar o assembly associado com o nome informado. /// </summary> /// <param name="assemblyName">Nome do assembly.</param> /// <param name="assembly">Instancia do assembly carregado.</param> /// <param name="exception">Error ocorrido</param> /// <returns>True caso o assembly tenha sido carregado com sucesso.</returns> public bool TryGet(string assemblyName, out System.Reflection.Assembly assembly, out Exception exception) { var assemblyName2 = new System.Reflection.AssemblyName(assemblyName); System.Reflection.Assembly assembly2 = null; exception = null; try { assembly2 = _domain.Load(assemblyName2); } catch (Exception ex) { exception = ex; assembly = null; } if (assembly2 != null) { assembly = assembly2; return(true); } var assemblyPart = new AssemblyPart(assemblyName); IAssemblyPackage package = null; try { var container = _assemblyRepository.GetAssemblyPackages(new AssemblyPart[] { assemblyPart }); package = container.FirstOrDefault(); } catch (Exception ex) { exception = ex; assembly = null; return(false); } if (package != null) { assembly2 = package.GetAssembly(assemblyPart); assembly = assembly2; exception = null; return(assembly2 != null); } else { assembly = null; return(false); } }
/// <summary> /// Carrega os assemblies. /// </summary> /// <returns></returns> private AssemblyLoaderGetResult LoadAssemblies() { var resultEntries = new List <AssemblyLoaderGetResult.Entry>(); AssemblyPackageContainer packagesContainer = null; var assemblyParts = _assemblyParts == null ? new AssemblyPart[0] : _assemblyParts.ToArray(); try { packagesContainer = _assemblyRepository.GetAssemblyPackages(assemblyParts); } catch (Exception ex) { if (ex is Colosoft.Net.DownloaderException) { ex = new AssemblyResolverException(ResourceMessageFormatter.Create(() => Properties.Resources.AssemblyResolver_GetAssemblyDownloaderException, ex.Message).Format(), ex); } else { ex = new AssemblyResolverException(ex.Message, ex); } foreach (var assemblyPart in _assemblyParts) { resultEntries.Add(new AssemblyLoaderGetResult.Entry(assemblyPart.Source.GetAssemblyNameWithoutExtension(), null, false, ex)); } return(new AssemblyLoaderGetResult(resultEntries)); } if (packagesContainer != null) { foreach (var assemblyPart in assemblyParts) { var packageFound = false; foreach (var package in packagesContainer) { if (package.Contains(assemblyPart)) { packageFound = true; System.Reflection.Assembly assembly = null; try { assembly = package.GetAssembly(assemblyPart); } catch (Exception ex) { resultEntries.Add(new AssemblyLoaderGetResult.Entry(assemblyPart.Source.GetAssemblyNameWithoutExtension(), null, false, ex)); continue; } resultEntries.Add(new AssemblyLoaderGetResult.Entry(assembly.GetName().Name, assembly, true, null)); break; } } if (!packageFound) { resultEntries.Add(new AssemblyLoaderGetResult.Entry(assemblyPart.Source.GetAssemblyNameWithoutExtension(), null, true, null)); } } } else { foreach (var assemblyPart in _assemblyParts) { resultEntries.Add(new AssemblyLoaderGetResult.Entry(assemblyPart.Source.GetAssemblyNameWithoutExtension(), null, true, null)); } } return(new AssemblyLoaderGetResult(resultEntries)); }