public IProjectCompiler GetCompiler(TypeInformation provider, IAssemblyLoadContext loadContext) { // TODO: Optimize the default compiler case by using the default load context directly var services = new ServiceProvider(_context.Services); services.Add(typeof(IAssemblyLoadContext), loadContext); var assembly = loadContext.Load(provider.AssemblyName); var type = assembly.GetType(provider.TypeName); return (IProjectCompiler)ActivatorUtilities.CreateInstance(services, type); }
public IProjectCompiler GetCompiler(TypeInformation provider) { // Load the factory return _compilers.GetOrAdd(provider, typeInfo => CompilerServices.CreateService<IProjectCompiler>(_context.Services, _compilerLoadContext.Value, typeInfo)); }
public Project ReadProject(Stream stream, string projectName, string projectPath, ICollection<DiagnosticMessage> diagnostics) { var project = new Project(); var reader = new StreamReader(stream); var rawProject = JsonDeserializer.Deserialize(reader) as JsonObject; if (rawProject == null) { throw FileFormatException.Create( "The JSON file can't be deserialized to a JSON object.", projectPath); } // Meta-data properties project.Name = projectName; project.ProjectFilePath = Path.GetFullPath(projectPath); var version = rawProject.Value("version") as JsonString; if (version == null) { project.Version = new SemanticVersion("1.0.0"); } else { try { var buildVersion = Environment.GetEnvironmentVariable("DNX_BUILD_VERSION"); project.Version = SpecifySnapshot(version, buildVersion); } catch (Exception ex) { throw FileFormatException.Create(ex, version, project.ProjectFilePath); } } var fileVersion = Environment.GetEnvironmentVariable("DNX_ASSEMBLY_FILE_VERSION"); if (string.IsNullOrWhiteSpace(fileVersion)) { project.AssemblyFileVersion = project.Version.Version; } else { try { var simpleVersion = project.Version.Version; project.AssemblyFileVersion = new Version(simpleVersion.Major, simpleVersion.Minor, simpleVersion.Build, int.Parse(fileVersion)); } catch (FormatException ex) { throw new FormatException("The assembly file version is invalid: " + fileVersion, ex); } } project.Description = rawProject.ValueAsString("description"); project.Summary = rawProject.ValueAsString("summary"); project.Copyright = rawProject.ValueAsString("copyright"); project.Title = rawProject.ValueAsString("title"); project.EntryPoint = rawProject.ValueAsString("entryPoint"); project.ProjectUrl = rawProject.ValueAsString("projectUrl"); project.LicenseUrl = rawProject.ValueAsString("licenseUrl"); project.IconUrl = rawProject.ValueAsString("iconUrl"); project.Authors = rawProject.ValueAsStringArray("authors") ?? new string[] { }; project.Owners = rawProject.ValueAsStringArray("owners") ?? new string[] { }; project.Tags = rawProject.ValueAsStringArray("tags") ?? new string[] { }; project.Language = rawProject.ValueAsString("language"); project.ReleaseNotes = rawProject.ValueAsString("releaseNotes"); project.RequireLicenseAcceptance = rawProject.ValueAsBoolean("requireLicenseAcceptance", defaultValue: false); project.IsLoadable = rawProject.ValueAsBoolean("loadable", defaultValue: true); // TODO: Move this to the dependencies node project.EmbedInteropTypes = rawProject.ValueAsBoolean("embedInteropTypes", defaultValue: false); project.Dependencies = new List<LibraryDependency>(); // Project files project.Files = new ProjectFilesCollection(rawProject, project.ProjectDirectory, project.ProjectFilePath); var compilerInfo = rawProject.ValueAsJsonObject("compiler"); if (compilerInfo != null) { var languageName = compilerInfo.ValueAsString("name") ?? "C#"; var compilerAssembly = compilerInfo.ValueAsString("compilerAssembly"); var compilerType = compilerInfo.ValueAsString("compilerType"); var compiler = new TypeInformation(compilerAssembly, compilerType); project.CompilerServices = new CompilerServices(languageName, compiler); } var commands = rawProject.Value("commands") as JsonObject; if (commands != null) { foreach (var key in commands.Keys) { var value = commands.ValueAsString(key); if (value != null) { project.Commands[key] = value; } } } var scripts = rawProject.Value("scripts") as JsonObject; if (scripts != null) { foreach (var key in scripts.Keys) { var stringValue = scripts.ValueAsString(key); if (stringValue != null) { project.Scripts[key] = new string[] { stringValue }; continue; } var arrayValue = scripts.ValueAsStringArray(key); if (arrayValue != null) { project.Scripts[key] = arrayValue; continue; } throw FileFormatException.Create( string.Format("The value of a script in {0} can only be a string or an array of strings", Project.ProjectFileName), scripts.Value(key), project.ProjectFilePath); } } BuildTargetFrameworksAndConfigurations(project, rawProject, diagnostics); PopulateDependencies( project.ProjectFilePath, project.Dependencies, rawProject, "dependencies", isGacOrFrameworkReference: false); return project; }
internal static Project GetProjectFromStream(Stream stream, string projectName, string projectPath, ICollection <DiagnosticMessage> diagnostics = null) { var project = new Project(); var reader = new StreamReader(stream); var rawProject = JsonDeserializer.Deserialize(reader) as JsonObject; if (rawProject == null) { throw FileFormatException.Create( "The JSON file can't be deserialized to a JSON object.", projectPath); } // Meta-data properties project.Name = projectName; project.ProjectFilePath = Path.GetFullPath(projectPath); var version = rawProject.Value("version") as JsonString; if (version == null) { project.Version = new SemanticVersion("1.0.0"); } else { try { var buildVersion = Environment.GetEnvironmentVariable("DNX_BUILD_VERSION"); project.Version = SpecifySnapshot(version, buildVersion); } catch (Exception ex) { throw FileFormatException.Create(ex, version, project.ProjectFilePath); } } var fileVersion = Environment.GetEnvironmentVariable("DNX_ASSEMBLY_FILE_VERSION"); if (string.IsNullOrWhiteSpace(fileVersion)) { project.AssemblyFileVersion = project.Version.Version; } else { try { var simpleVersion = project.Version.Version; project.AssemblyFileVersion = new Version(simpleVersion.Major, simpleVersion.Minor, simpleVersion.Build, int.Parse(fileVersion)); } catch (FormatException ex) { throw new FormatException("The assembly file version is invalid: " + fileVersion, ex); } } project.Description = rawProject.ValueAsString("description"); project.Summary = rawProject.ValueAsString("summary"); project.Copyright = rawProject.ValueAsString("copyright"); project.Title = rawProject.ValueAsString("title"); project.WebRoot = rawProject.ValueAsString("webroot"); project.EntryPoint = rawProject.ValueAsString("entryPoint"); project.ProjectUrl = rawProject.ValueAsString("projectUrl"); project.LicenseUrl = rawProject.ValueAsString("licenseUrl"); project.IconUrl = rawProject.ValueAsString("iconUrl"); project.Authors = rawProject.ValueAsStringArray("authors") ?? new string[] { }; project.Owners = rawProject.ValueAsStringArray("owners") ?? new string[] { }; project.Tags = rawProject.ValueAsStringArray("tags") ?? new string[] { }; project.Language = rawProject.ValueAsString("language"); project.ReleaseNotes = rawProject.ValueAsString("releaseNotes"); project.RequireLicenseAcceptance = rawProject.ValueAsBoolean("requireLicenseAcceptance", defaultValue: false); project.IsLoadable = rawProject.ValueAsBoolean("loadable", defaultValue: true); // TODO: Move this to the dependencies node project.EmbedInteropTypes = rawProject.ValueAsBoolean("embedInteropTypes", defaultValue: false); project.Dependencies = new List <LibraryDependency>(); // Project files project.Files = new ProjectFilesCollection(rawProject, project.ProjectDirectory, project.ProjectFilePath, diagnostics); var compilerInfo = rawProject.ValueAsJsonObject("compiler"); if (compilerInfo != null) { var languageName = compilerInfo.ValueAsString("name") ?? "C#"; var compilerAssembly = compilerInfo.ValueAsString("compilerAssembly"); var compilerType = compilerInfo.ValueAsString("compilerType"); var compiler = new TypeInformation(compilerAssembly, compilerType); project.CompilerServices = new CompilerServices(languageName, compiler); } var commands = rawProject.Value("commands") as JsonObject; if (commands != null) { foreach (var key in commands.Keys) { var value = commands.ValueAsString(key); if (value != null) { project.Commands[key] = value; } } } var scripts = rawProject.Value("scripts") as JsonObject; if (scripts != null) { foreach (var key in scripts.Keys) { var stringValue = scripts.ValueAsString(key); if (stringValue != null) { project.Scripts[key] = new string[] { stringValue }; continue; } var arrayValue = scripts.ValueAsStringArray(key); if (arrayValue != null) { project.Scripts[key] = arrayValue; continue; } throw FileFormatException.Create( string.Format("The value of a script in {0} can only be a string or an array of strings", ProjectFileName), scripts.Value(key), project.ProjectFilePath); } } var repository = rawProject.Value("repository") as JsonObject; if (repository != null) { project.Repository = repository .Keys .ToDictionary( key => key, key => repository.ValueAsString(key).Value); } project.BuildTargetFrameworksAndConfigurations(rawProject, diagnostics); PopulateDependencies( project.ProjectFilePath, project.Dependencies, rawProject, "dependencies", isGacOrFrameworkReference: false); return(project); }