private LoaderMessages FillCatalog() { _compositionContainer.ComposeExportedValue(nameof(VsPackage), (IServiceProvider)this); _compositionContainer.ComposeExportedValue(Tracer); var assembly = GetType().Assembly; var messages = new LoaderMessages(); //var allLocalAssemblyFileNames = Directory.EnumerateFiles(path, @"*.dll"); //var allLocalAssemblyNames = new HashSet<string>(allLocalAssemblyFileNames.Select(Path.GetFileNameWithoutExtension)); //var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); //var messages = loadedAssemblies // .Where(a => allLocalAssemblyNames.Contains(a.GetName().Name)) // .Where(a => !string.Equals(Path.GetDirectoryName(a.Location), path, StringComparison.OrdinalIgnoreCase)) // .OrderBy(a => a.FullName, StringComparer.OrdinalIgnoreCase) // .Select(assembly => string.Format(CultureInfo.CurrentCulture, "Found assembly '{0}' already loaded from {1}.", assembly.FullName, assembly.CodeBase)) // .ToList(); #pragma warning disable CA2000 // Dispose objects before losing scope => AggregateCatalog will dispose all _compositionCatalog.Catalogs.Add(new AssemblyCatalog(assembly)); _compositionCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Infrastructure.Properties.AssemblyKey).Assembly)); _compositionCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Model.Properties.AssemblyKey).Assembly)); _compositionCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Translators.Properties.AssemblyKey).Assembly)); _compositionCatalog.Catalogs.Add(new AssemblyCatalog(typeof(View.Properties.AssemblyKey).Assembly)); #pragma warning restore CA2000 // Dispose objects before losing scope _exportProviderLoaded.Set(); return(messages); }
private LoaderMessages FillCatalog() { var assembly = GetType().Assembly; var messages = new LoaderMessages(); //var allLocalAssemblyFileNames = Directory.EnumerateFiles(path, @"*.dll"); //var allLocalAssemblyNames = new HashSet<string>(allLocalAssemblyFileNames.Select(Path.GetFileNameWithoutExtension)); //var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); //var messages = loadedAssemblies // .Where(a => allLocalAssemblyNames.Contains(a.GetName().Name)) // .Where(a => !string.Equals(Path.GetDirectoryName(a.Location), path, StringComparison.OrdinalIgnoreCase)) // .OrderBy(a => a.FullName, StringComparer.OrdinalIgnoreCase) // .Select(assembly => string.Format(CultureInfo.CurrentCulture, "Found assembly '{0}' already loaded from {1}.", assembly.FullName, assembly.CodeBase)) // .ToList(); _kernel.BindExports(assembly, typeof(Infrastructure.Properties.AssemblyKey).Assembly, typeof(Model.Properties.AssemblyKey).Assembly, typeof(Translators.Properties.AssemblyKey).Assembly, typeof(View.Properties.AssemblyKey).Assembly); _kernel.Bind <IExportProvider>().ToConstant(ExportProvider); return(messages); }
private LoaderMessages FillCatalog() { var compositionContainer = _compositionHost.Container; compositionContainer.ComposeExportedValue(nameof(VSPackage), (IServiceProvider)this); compositionContainer.ComposeExportedValue(Tracer); var thisAssembly = GetType().Assembly; var path = Path.GetDirectoryName(thisAssembly.Location); var messages = new LoaderMessages(); //var allLocalAssemblyFileNames = Directory.EnumerateFiles(path, @"*.dll"); //var allLocalAssemblyNames = new HashSet<string>(allLocalAssemblyFileNames.Select(Path.GetFileNameWithoutExtension)); //var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); //var messages = loadedAssemblies // .Where(a => allLocalAssemblyNames.Contains(a.GetName().Name)) // .Where(a => !string.Equals(Path.GetDirectoryName(a.Location), path, StringComparison.OrdinalIgnoreCase)) // .OrderBy(a => a.FullName, StringComparer.OrdinalIgnoreCase) // .Select(assembly => string.Format(CultureInfo.CurrentCulture, "Found assembly '{0}' already loaded from {1}.", assembly.FullName, assembly.CodeBase)) // .ToList(); foreach (var file in Directory.EnumerateFiles(path, @"*.dll")) { try { var assembly = Assembly.LoadFrom(file); messages.Messages.Add(string.Format(CultureInfo.CurrentCulture, "Loaded assembly '{0}' from {1}.", assembly.FullName, assembly.CodeBase)); _compositionHost.AddCatalog(new AssemblyCatalog(assembly)); } catch (ReflectionTypeLoadException ex) { // ReSharper disable once AssignNullToNotNullAttribute // ReSharper disable once PossibleNullReferenceException messages.Errors.Add("Assembly: " + Path.GetFileName(file) + " => " + string.Join("\n", ex.LoaderExceptions.Select(l => l.Message + ": " + (l.InnerException?.Message ?? string.Empty)))); } catch (Exception ex) { messages.Errors.Add("Assembly: " + Path.GetFileName(file) + " => " + ex.Message); } } _compositionHostLoaded.Set(); return(messages); }
private LoaderMessages FillCatalog() { var assembly = GetType().Assembly; var messages = new LoaderMessages(); //var allLocalAssemblyFileNames = Directory.EnumerateFiles(path, @"*.dll"); //var allLocalAssemblyNames = new HashSet<string>(allLocalAssemblyFileNames.Select(Path.GetFileNameWithoutExtension)); //var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); //var messages = loadedAssemblies // .Where(a => allLocalAssemblyNames.Contains(a.GetName().Name)) // .Where(a => !string.Equals(Path.GetDirectoryName(a.Location), path, StringComparison.OrdinalIgnoreCase)) // .OrderBy(a => a.FullName, StringComparer.OrdinalIgnoreCase) // .Select(assembly => string.Format(CultureInfo.CurrentCulture, "Found assembly '{0}' already loaded from {1}.", assembly.FullName, assembly.CodeBase)) // .ToList(); var is64BitProcess = Environment.Is64BitProcess; using var resourceStream = is64BitProcess ? Resource.AsStream("ResXManager.VSIX.Compatibility.x64.dll") : Resource.AsStream("ResXManager.VSIX.Compatibility.x86.dll"); var length = resourceStream.Length; var data = new byte[length]; resourceStream.Read(data, 0, (int)length); var compatibilityLayer = System.Reflection.Assembly.Load(data); _kernel.BindExports(assembly, typeof(Infrastructure.Properties.AssemblyKey).Assembly, typeof(Model.Properties.AssemblyKey).Assembly, typeof(Translators.Properties.AssemblyKey).Assembly, typeof(View.Properties.AssemblyKey).Assembly, compatibilityLayer); _kernel.Bind <IExportProvider>().ToConstant(ExportProvider); return(messages); }
private void ShowLoaderMessages(LoaderMessages messages) { if (!messages.Errors.Any()) { return; } try { foreach (var error in messages.Errors) { Tracer.TraceError(error); } foreach (var message in messages.Messages) { Tracer.WriteLine(message); } } catch { MessageBox.Show("Loader errors:\n" + string.Join("\n", messages.Errors)); } }