DisableOutOfProcTaskHost 有什么作用?

What does DisableOutOfProcTaskHost do?

我最近 运行 在构建 WPF 应用程序时遇到问题,出现以下错误:

C:\Program Files (x86)\Microsoft Visual Studio19\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(3036,5): error MSB4216: Could not run the "GenerateResource" task because MSBuild could not create or connect to a task host with runtime "CLR4" and architecture "x64". Please ensure that (1) the requested runtime and/or architecture are available on the machine, and (2) that the required executable "C:\Program Files (x86)\Microsoft Visual Studio19\Professional\MSBuild\Current\Bin\amd64\MSBuild.exe" exists and can be run.

C:\Program Files (x86)\Microsoft Visual Studio19\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(3058,7): error MSB4028: The "GenerateResource" task's outputs could not be retrieved from the "FilesWritten" parameter. Object does not match target type.

帮助我的是将系统变量 DISABLEOUTOFPROCTASKHOST 设置为 1。这个解决方案是用谷歌搜索的,我找不到关于发生了什么以及为什么 DISABLEOUTOFPROCTASKHOST 帮助我的解释。

任何人都可以向我解释错误的原因是什么以及为什么变量对我有帮助吗?

在您这边,似乎您编译的资源与主机 MSBuild 实例的架构不同。这可能是由于您的项目资源文件版本不同或使用不同版本的代码需要启动不同版本的 MSBuild(arm64\msbuild.exe) 使用不同的 CLR.

所以的做法是让MSBuild一直跟在当前的文件构建版本上,也就是可以自动切换相同 MSBuild 构建过程下不同版本的构建机制。

解决方案是在您的 xxx.csproj 文件中添加这些 xml 节点:

<PropertyGroup>   
     <GenerateResourceMSBuildArchitecture>CurrentArchitecture</GenerateResourceMSBuildArchitecture>
     <GenerateResourceMSBuildRuntime>CurrentRuntime</GenerateResourceMSBuildRuntime>
</PropertyGroup>

或者1中添加环境变量DISABLEOUTOFPROCTASKHOST.(让它在同一个MSBuild.exe构建下切换不同版本的构建机制过程)

我有同样的错误。 但通过修复 Visual Studio 2019, 关闭 VS,删除 .vs 隐藏文件夹(在解决方案文件夹下),bin 和 obj 文件夹,然后重新启动 VS。 还好我的问题解决了。