Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MaxNodeCount大于1时,MSBuild版本16将运行数百个MSBuild进程_C#_.net_Parallel Processing_Msbuild - Fatal编程技术网

C# MaxNodeCount大于1时,MSBuild版本16将运行数百个MSBuild进程

C# MaxNodeCount大于1时,MSBuild版本16将运行数百个MSBuild进程,c#,.net,parallel-processing,msbuild,C#,.net,Parallel Processing,Msbuild,我们有一个应用程序,它构建并准备ASP.NET应用程序的“部署包”。它引用了.NET Framework MSBuild,该版本运行良好。几周前,我们开始使用VS2019而不是VS2015。由于某些NuGet软件包,我们必须使用最新的MSBuild更新此应用程序,它现在是VS的一部分,不再在GAC中。我是用电脑做的。然后乐趣开始了…:/我发现问题在于BuildParameters.MaxNodeCount属性: 如果我将其值设置为1,则一切正常,但速度比更新前慢得多 若值设置为大于1的值(我将

我们有一个应用程序,它构建并准备ASP.NET应用程序的“部署包”。它引用了.NET Framework MSBuild,该版本运行良好。几周前,我们开始使用VS2019而不是VS2015。由于某些NuGet软件包,我们必须使用最新的MSBuild更新此应用程序,它现在是VS的一部分,不再在GAC中。我是用电脑做的。然后乐趣开始了…:/我发现问题在于BuildParameters.MaxNodeCount属性:

  • 如果我将其值设置为1,则一切正常,但速度比更新前慢得多
  • 若值设置为大于1的值(我将其设置为Environment.ProcessorCount),则会启动数百个MSBuild进程。有时它可以工作,但大多数时候它会失败,出现outofmemory异常。有时甚至操作系统也会崩溃,需要重新启动

在更新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);
Dictionary GlobalProperty=new Dictionary();
添加(“平台”、“任何CPU”);
添加(“配置”、“发布”);
添加(“TargetFrameworkVersion”、“v4.8”);
添加(“DeployOnBuild”、“true”);
添加(“PublishProfile”,“作为输入参数传递”);
添加(“AspnetMergePath”,“作为输入参数传递”);
BuildResult BuildResult;
FileLogger fl=新的FileLogger()
{
参数=@“logfile=log\u file\u path;append=true”,
详细性=日志详细性。正常
};
BuildParameters bp=新的BuildParameters()
{
Loggers=新列表{fl}.AsEnumerable(),
DetailedSummary=false,
OnlyLogCriticalEvents=false,
ShutdownInProcNodeOnBuildFinish=true,
MaxNodeCount=Environment.ProcessorCount
};           
BuildRequestData br;
br=新建BuildRequestData(projectFileName,GlobalProperty,null,新字符串[]{“清理”,“重建”},null);
buildResult=BuildManager.DefaultBuildManager.Build(bp,br);

我发现同样的问题不知从哪里冒出来。很高兴看到我还没发疯。你找到解决办法了吗?我连续两天把头撞在桌子上,没有任何有用的结果…:(而且没有关于谷歌叔叔这个话题的信息(至少我不知道)。我没有。我也回到了远程工作,所以我无法真正测试它,因为发生这种情况时Windows将完全关闭…我已卸载VS2019,只留下MSBuild 15.0,问题仍然存在。我认为另一个相关症状是多次生成同一个项目文件,即使使用不同的项目集合和生成管理呃,使项目数据在调用之间传递,并导致生成错误和一般的胡说八道。我已经退回到单线程构建,直到其他人能够插话。我发现同样的问题不知从哪里冒出来。很高兴看到我还没有发疯。你找到解决方案了吗?我已经连续两天在没有我们的情况下把头撞到桌子上了有能力的结果…:(而且没有关于谷歌叔叔这个话题的信息(至少我不知道)。我没有。我也回到了远程工作,所以我无法真正测试它,因为发生这种情况时Windows将完全关闭…我已卸载VS2019,只留下MSBuild 15.0,问题仍然存在。我认为另一个相关症状是多次生成同一个项目文件,即使使用不同的项目集合和生成管理呃,使项目数据在调用之间传递,并导致构建错误和一般的胡说八道。我已经退回到单线程构建,直到其他人能够插话。