private static async Task <(ErgonProject project, DiagnosticLog log)> LoadProjectAsync( string path, ErgonProjectCollection projectCollection, CancellationToken cancellationToken) { var log = new DiagnosticLog(); try { var loadedProjects = projectCollection.GetLoadedProjects(path); if (loadedProjects != null && loadedProjects.Count > 0) { Debug.Assert(loadedProjects.Count == 1); return(loadedProjects.First(), log); } using (var stream = FileUtilities.OpenAsyncRead(path)) using (var readStream = await SerializableBytes.CreateReadableStreamAsync(stream, cancellationToken).ConfigureAwait(false)) using (var reader = new StreamReader(readStream)) { var project = ErgonProject.FromString(await reader.ReadToEndAsync(), path); projectCollection.Add(project); // todo: assign project.path = path return(project, log); } } catch (Exception e) { log.Add(e, path); return(project : null, log); } }
public void StartBatchBuild(IDictionary <string, string> globalProperties = null) { if (_batchBuildStarted) { throw new InvalidOperationException(); } globalProperties = globalProperties ?? ImmutableDictionary <string, string> .Empty; var allProperties = s_defaultGlobalProperties.AddRange(globalProperties); _batchBuildProjectCollection = new ErgonProjectCollection(allProperties); //_batchBuildLogger = new ErgonDiagnosticLogger() //{ // Verbosity = MSB.Framework.LoggerVerbosity.Normal //}; //var buildParameters = new MSB.Execution.BuildParameters(_batchBuildProjectCollection) //{ // Loggers = new MSB.Framework.ILogger[] { _batchBuildLogger } //}; //MSB.Execution.BuildManager.DefaultBuildManager.BeginBuild(buildParameters); _batchBuildStarted = true; }
public void EndBatchBuild() { if (!_batchBuildStarted) { throw new InvalidOperationException(); } //MSB.Execution.BuildManager.DefaultBuildManager.EndBuild(); // unload project so collection will release global strings _batchBuildProjectCollection.UnloadAllProjects(); _batchBuildProjectCollection = null; //_batchBuildLogger = null; _batchBuildStarted = false; }
public Task <(ErgonProject project, DiagnosticLog log)> LoadProjectAsync( string path, CancellationToken cancellationToken) { if (_batchBuildStarted) { return(LoadProjectAsync(path, _batchBuildProjectCollection, cancellationToken)); } else { var projectCollection = new ErgonProjectCollection(AllGlobalProperties); try { return(LoadProjectAsync(path, projectCollection, cancellationToken)); } finally { // unload project so collection will release global strings projectCollection.UnloadAllProjects(); } } }