Arun Vasu Ответов: 1

Msbuild не поддерживает многопоточную сборку решений


У меня есть ситуация, чтобы построить несколько решений с помощью MSBUILD в многопоточности, но во время сборки всегда несколько решений терпят неудачу. Я стараюсь строить каждое решение одно за другим , оно работает идеально. но у меня есть попытка построить 5 решений с использованием многопоточности, немногие сборки терпят неудачу. Когда я исследовал файл журнала сборки как успешной сборки, так и неудачной сборки, мне показалось, что MSBUILD конфликтует с каждым процессом сборки. Для справки я приложил два текстовых файла журнала сборки.

Начало сборки для отправки ID 11468

Начало сборки для отправки ID 11468

string SolutionPath = System.IO.Directory.GetFiles(SolutionFolder, "*.sln").FirstOrDefault();
                WriteLog("A", TimeStartExecute.ElapsedMilliseconds.ToString(), string.Format("Build solution name {0}", SolutionPath));
                ProjectCollection pc = new ProjectCollection();
                Dictionary GlobalProperty = new Dictionary();
                GlobalProperty.Add("Configuration", appConfiguration);
                GlobalProperty.Add("Platform", appPlatform);
                //GlobalProperty.Add("Platform", "x86");
                GlobalProperty.Add("OutputPath", appOutputPath);
                GlobalProperty.Add("VisualStudioVersion", appVSVersion);
                GlobalProperty.Add("BuildInParallel", "true");
                GlobalProperty.Add("maxcpucount", "2");
                BuildParameters bp = new BuildParameters(pc);
                 

                if (appBuildLogger.Equals("true"))
                {
                    bp.Loggers = new[]
                    {
                        new FileLogger
                        {
                        Verbosity = LoggerVerbosity.Detailed,
                        ShowSummary = true,
                        SkipProjectStartedText = true,
                        Parameters=@"Logfile="+SolutionFolder+"\\build.log"
                        }
                    };
                }
 using (BuildManager objBuildManager = new BuildManager())
 {
 BuildRequestData BuildRequest = new BuildRequestData(SolutionPath, GlobalProperty, "14.0", new string[]
 { "Build" }, null,
    BuildRequestDataFlags.ReplaceExistingProjectInstance);
    BuildResult buildResult = objBuildManager.Build(bp, BuildRequest)
 if (buildResult.OverallResult == BuildResultCode.Success)
 {
  buildPath = Convert.ToString(buildResult.ResultsByTarget.FirstOrDefault(x =>
x.Key == "Build").Value.Items[0]);
 }
}


Что я уже пробовал:

После расследования обнаружена проблема в процессе сборки по журналу сборки..

Журнал успешной сборки https://github.com/Microsoft/msbuild/files/1115978/11468.success.txt

неспособность построить отчет https://github.com/Microsoft/msbuild/files/1115979/11468.failed.txt

1 Ответов

Рейтинг:
2

RickZeeland

В failed.txt я вижу, что у MsBuild есть проблемы с поиском CopyArray_Test и ищет во множестве мест, пока не найдет то, что вы, вероятно, и не собирались.
Поэтому убедитесь, что вы правильно выбрали свой путь, и, возможно, перестройка тоже поможет.


Arun Vasu

Спасибо за быстрый ответ.

Вы можете увидеть оба текстовых файла.. изначально он идет по правильному пути решения, это изменится только после завершения нескольких шагов.. Вы можете видеть это на этом изображении..
https://i.stack.imgur.com/KbaJb.png