public Assembly Load(AssemblyName assemblyName) { var projectPath = Path.Combine(_path, assemblyName.Name); if (!Project.HasProjectFile(projectPath)) { return null; } return _cache.Get<Assembly>(assemblyName.Name, cacheContext => { var moduleContext = new ModuleLoaderContext( projectPath, _applicationEnvironment.RuntimeFramework); foreach (var lib in moduleContext.LibraryManager.GetLibraries()) { _libraryManager.AddLibrary(lib); } var engine = new CompilationEngine(new CompilationEngineContext( _applicationEnvironment, _assemblyLoadContextAccessor.Default, new CompilationCache())); var exporter = engine.CreateProjectExporter( moduleContext.Project, moduleContext.TargetFramework, _applicationEnvironment.Configuration); var exports = exporter.GetAllExports(moduleContext.Project.Name); foreach (var metadataReference in exports.MetadataReferences) { _libraryManager.AddMetadataReference(metadataReference); } return engine.LoadProject(moduleContext.Project, null, _assemblyLoadContextAccessor.Default); }); }
public Assembly Load(AssemblyName assemblyName) { var reference = _libraryManager.GetMetadataReference(assemblyName.Name); if (reference != null && reference is MetadataFileReference) { var fileReference = (MetadataFileReference)reference; var assembly = _assemblyLoadContextAccessor .Default .LoadFile(fileReference.Path); return assembly; } var projectPath = Path.Combine(_path, assemblyName.Name); if (!Project.HasProjectFile(projectPath)) { return null; } var moduleContext = new ModuleLoaderContext( projectPath, _applicationEnvironment.RuntimeFramework); foreach (var lib in moduleContext.LibraryManager.GetLibraries()) { _libraryManager.AddLibrary(lib); } var engine = new CompilationEngine(new CompilationEngineContext( _applicationEnvironment, _runtimeEnvironment, _assemblyLoadContextAccessor.Default, new CompilationCache())); var exporter = engine.CreateProjectExporter( moduleContext.Project, moduleContext.TargetFramework, _applicationEnvironment.Configuration); var exports = exporter.GetAllExports(moduleContext.Project.Name); foreach (var metadataReference in exports.MetadataReferences) { _libraryManager.AddMetadataReference(metadataReference); } var loadedProjectAssembly = engine.LoadProject( moduleContext.Project, _applicationEnvironment.RuntimeFramework, null, _assemblyLoadContextAccessor.Default, assemblyName); IList<LibraryDependency> flattenedList = moduleContext .Project .Dependencies .SelectMany(x => Flatten(x)) .Where(x => x.Library.Type == "Package") .Distinct() .ToList(); foreach (var dependency in flattenedList) { foreach (var assemblyToLoad in dependency.Library.Assemblies) { Assembly.Load(new AssemblyName(assemblyToLoad)); } } return loadedProjectAssembly; }
public Assembly Load(AssemblyName assemblyName) { return _cache.Get<Assembly>(assemblyName.Name, cacheContext => { var reference = _libraryManager.GetMetadataReference(assemblyName.Name); if (reference is MetadataFileReference) { var fileReference = (MetadataFileReference)reference; var assembly = _assemblyLoadContextAccessor .Default .LoadFile(fileReference.Path); return assembly; } var projectPath = Path.Combine(_path, assemblyName.Name); if (!Project.HasProjectFile(projectPath)) { return null; } var moduleContext = new ModuleLoaderContext( projectPath, _applicationEnvironment.RuntimeFramework); foreach (var lib in moduleContext.LibraryManager.GetLibraries()) { _libraryManager.AddLibrary(lib); } var ctx = new CompilationEngineContext( _applicationEnvironment, _runtimeEnvironment, _assemblyLoadContextAccessor.Default, new CompilationCache()); var engine = new CompilationEngine(ctx); var exporter = engine.CreateProjectExporter( moduleContext.Project, moduleContext.TargetFramework, _applicationEnvironment.Configuration); var exports = exporter.GetAllExports(moduleContext.Project.Name); foreach (var metadataReference in exports.MetadataReferences) { _libraryManager.AddMetadataReference(metadataReference); } //LibraryExport projectExport = exporter.GetExport(moduleContext.Project.Name); //IMetadataProjectReference projectRef = (IMetadataProjectReference)projectExport.MetadataReferences.First(); //string exportDir = Path.Combine(moduleContext.Project.ProjectDirectory, "export"); //projectRef.EmitAssembly(exportDir); //string assemblyPath = Path.Combine(exportDir, moduleContext.Project.Name + ".dll"); Assembly pluginAssm = engine.LoadProject( moduleContext.Project, moduleContext.FrameworkName, null, _assemblyLoadContextAccessor.Default, new AssemblyName(moduleContext.Project.Name)); IList<LibraryDependency> flattenedList = moduleContext .Project .Dependencies .SelectMany(Flatten) .Where(x => x.Library.Type == "Package") .Distinct() .ToList(); //foreach (var dependency in flattenedList) //{ // foreach (var assemblyToLoad in dependency.Library.Assemblies) // { // Assembly.Load(new AssemblyName(assemblyToLoad)); // } //} return pluginAssm; }); }