首页 > 解决方案 > 当 MaxNodeCount 大于 1 时,MSBuild ver.16 运行数百个 MSBuild 进程

问题描述

我们有一个应用程序,它构建和准备我们的 ASP.NET 应用程序的“部署包”。它引用了运行良好的 .NET Framework MSBuild。几周前,我们开始使用 VS2019 而不是 VS2015。由于一些 NuGet 包,我们不得不用最新的 MSBuild 更新这个应用程序,它现在是 VS 的一部分,不再是 GAC 中的一部分。我是使用这个文档做到的。然后乐趣开始了......:/我发现问题在于BuildParameters.MaxNodeCount属性:

很多 MSBuild 进程的图片

MSBuild 错误的图片

在更新之前BuildProperties.MaxNodeCount设置为Environment.ProcessorCount并且一切正常。

知道什么会导致这种行为吗?为什么不考虑属性 MaxNodeCount?

编辑1:

调用 MSBuild API 的代码:

Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();
GlobalProperty.Add("Platform", "Any CPU");
GlobalProperty.Add("Configuration", "Release");
GlobalProperty.Add("TargetFrameworkVersion", "v4.8");
GlobalProperty.Add("DeployOnBuild", "true");
GlobalProperty.Add("PublishProfile", "passed_as_input_parameter");
GlobalProperty.Add("AspnetMergePath", "passed_as_input_parameter");

BuildResult buildResult;
FileLogger fl = new FileLogger()
{
    Parameters = @"logfile=log_file_path;append=true",
    Verbosity = LoggerVerbosity.Normal
};

BuildParameters bp = new BuildParameters()
{
    Loggers = new List<Microsoft.Build.Framework.ILogger> { fl }.AsEnumerable(),
    DetailedSummary = false,
    OnlyLogCriticalEvents = false,
    ShutdownInProcNodeOnBuildFinish = true,
    MaxNodeCount = Environment.ProcessorCount
};           
            
BuildRequestData br;
br = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Clean", "Rebuild" }, null);

buildResult = BuildManager.DefaultBuildManager.Build(bp, br);

标签: c#.netparallel-processingmsbuild

解决方案


推荐阅读