/// <summary> /// Execute a recuperação dos pacotes de assembly. /// </summary> /// <param name="callState"></param> private void DoGetAssemblyPackages(object callState) { var arguments = (object[])callState; var asyncResult = (Threading.AsyncResult <AssemblyPackageContainer>)arguments[0]; var assemblyParts = (IEnumerable <AssemblyPart>)arguments[1]; AssemblyPackageContainer packageContainer = null; try { packageContainer = GetAssemblyPackages(assemblyParts); } catch (Exception ex) { asyncResult.HandleException(ex, false); return; } asyncResult.Complete(packageContainer, false); }
/// <summary> /// Tenta carrega os assemblies informados. /// </summary> /// <param name="assemblyNames">Nomes dos assemblies que serão carregados.</param> /// <returns></returns> public AssemblyLoaderGetResult Get(string[] assemblyNames) { var resultEntries = new List <AssemblyLoaderGetResult.Entry>(); var assemblyNames2 = new List <string>(); foreach (var assemblyName in assemblyNames.Distinct()) { var assemblyName2 = new System.Reflection.AssemblyName(assemblyName); System.Reflection.Assembly assembly2 = null; try { assembly2 = _domain.Load(assemblyName2); } catch (Exception) { } if (assembly2 == null) { assemblyNames2.Add(assemblyName); } } AssemblyPackageContainer packagesContainer = null; var assemblyParts = assemblyNames2.Select(f => new AssemblyPart(f)).ToArray(); try { packagesContainer = _assemblyRepository.GetAssemblyPackages(assemblyParts); } catch (Exception ex) { foreach (var assemblyName in assemblyNames2) { resultEntries.Add(new AssemblyLoaderGetResult.Entry(assemblyName, null, false, ex)); } } 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, null, false, ex)); continue; } resultEntries.Add(new AssemblyLoaderGetResult.Entry(assemblyPart.Source, assembly, true, null)); break; } } if (!packageFound) { resultEntries.Add(new AssemblyLoaderGetResult.Entry(assemblyPart.Source, null, true, null)); } } } else { foreach (var assemblyName in assemblyNames2) { resultEntries.Add(new AssemblyLoaderGetResult.Entry(assemblyName, null, true, null)); } } return(new AssemblyLoaderGetResult(resultEntries)); }
/// <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)); }