private void LoadAssemblyReferencesForPackage(ILogger log, PackageLoadParameters loadParameters) { if (log == null) throw new ArgumentNullException(nameof(log)); if (loadParameters == null) throw new ArgumentNullException(nameof(loadParameters)); var assemblyContainer = loadParameters.AssemblyContainer ?? AssemblyContainer.Default; foreach (var profile in Profiles) { foreach (var projectReference in profile.ProjectReferences.Where(projectRef => projectRef.Type == ProjectType.Plugin || projectRef.Type == ProjectType.Library)) { // Check if already loaded // TODO: More advanced cases: unload removed references, etc... if (LoadedAssemblies.Any(x => x.ProjectReference == projectReference)) continue; string assemblyPath = null; var fullProjectLocation = UPath.Combine(RootDirectory, projectReference.Location); try { var forwardingLogger = new ForwardingLoggerResult(log); assemblyPath = VSProjectHelper.GetOrCompileProjectAssembly(fullProjectLocation, forwardingLogger, loadParameters.AutoCompileProjects, loadParameters.BuildConfiguration, extraProperties: loadParameters.ExtraCompileProperties, onlyErrors: true); if (String.IsNullOrWhiteSpace(assemblyPath)) { log.Error("Unable to locate assembly reference for project [{0}]", fullProjectLocation); continue; } var loadedAssembly = new PackageLoadedAssembly(projectReference, assemblyPath); LoadedAssemblies.Add(loadedAssembly); if (!File.Exists(assemblyPath) || forwardingLogger.HasErrors) { log.Error("Unable to build assembly reference [{0}]", assemblyPath); continue; } var assembly = assemblyContainer.LoadAssemblyFromPath(assemblyPath, log); if (assembly == null) { log.Error("Unable to load assembly reference [{0}]", assemblyPath); } loadedAssembly.Assembly = assembly; if (assembly != null) { // Register assembly in the registry AssemblyRegistry.Register(assembly, AssemblyCommonCategories.Assets); } } catch (Exception ex) { log.Error("Unexpected error while loading project [{0}] or assembly reference [{1}]", ex, fullProjectLocation, assemblyPath); } } } }
private void LoadAssemblyReferencesForPackage(ILogger log, PackageLoadParameters loadParameters) { if (log == null) { throw new ArgumentNullException("log"); } if (loadParameters == null) { throw new ArgumentNullException("loadParameters"); } var assemblyContainer = loadParameters.AssemblyContainer ?? AssemblyContainer.Default; foreach (var profile in Profiles) { foreach (var projectReference in profile.ProjectReferences.Where(projectRef => projectRef.Type == ProjectType.Plugin || projectRef.Type == ProjectType.Library)) { // Check if already loaded // TODO: More advanced cases: unload removed references, etc... if (loadedAssemblies.Any(x => x.ProjectReference == projectReference)) { continue; } string assemblyPath = null; var fullProjectLocation = UPath.Combine(RootDirectory, projectReference.Location); try { var forwardingLogger = new ForwardingLoggerResult(log); assemblyPath = VSProjectHelper.GetOrCompileProjectAssembly(fullProjectLocation, forwardingLogger, loadParameters.AutoCompileProjects, extraProperties: loadParameters.ExtraCompileProperties, onlyErrors: true); if (String.IsNullOrWhiteSpace(assemblyPath)) { log.Error("Unable to locate assembly reference for project [{0}]", fullProjectLocation); continue; } var loadedAssembly = new PackageLoadedAssembly(projectReference, assemblyPath); loadedAssemblies.Add(loadedAssembly); if (!File.Exists(assemblyPath) || forwardingLogger.HasErrors) { log.Error("Unable to build assembly reference [{0}]", assemblyPath); continue; } var assembly = assemblyContainer.LoadAssemblyFromPath(assemblyPath, log); if (assembly == null) { log.Error("Unable to load assembly reference [{0}]", assemblyPath); } loadedAssembly.Assembly = assembly; if (assembly != null) { // Register assembly in the registry AssemblyRegistry.Register(assembly, AssemblyCommonCategories.Assets); } } catch (Exception ex) { log.Error("Unexpected error while loading project [{0}] or assembly reference [{1}]", ex, fullProjectLocation, assemblyPath); } } } }