Пример #1
0
        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);
            }
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }
Пример #4
0
 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();
         }
     }
 }