首页 > 解决方案 > DisableOutOfProcTaskHost 有什么作用?

问题描述

我最近在构建 WPF 应用程序时遇到了以下错误:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(3036,5):错误 MSB4216:无法运行“GenerateResource”任务,因为 MSBuild 可以不创建或连接到运行时“CLR4”和架构“x64”的任务主机。请确保 (1) 请求的运行时和/或架构在机器上可用,以及 (2) 所需的可执行文件“C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin \amd64\MSBuild.exe" 存在并且可以运行。

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(3058,7):错误 MSB4028:无法从中检索“GenerateResource”任务的输出“FilesWritten”参数。对象与目标类型不匹配。

帮助我的是将系统变量设置DISABLEOUTOFPROCTASKHOST1. 这个解决方案是用谷歌搜索的,我找不到关于正在发生的事情以及为什么DISABLEOUTOFPROCTASKHOST对我有帮助的解释。

谁能向我解释错误的原因是什么以及为什么该变量对我有帮助?

标签: c#.netwpfvisual-studiomsbuild

解决方案


在您这边,您似乎编译了一个与主机 MSBuild 实例具有不同架构的资源。这可能是由于项目资源文件的不同版本或使用不同版本的代码需要使用不同的CLR启动不同版本的MSBuild ( arm64\msbuild.exe)的附加进程的问题引起的。

所以做法是让MSBuild始终跟随当前文件构建版本,即在同一个MSBuild构建过程下,可以自动切换不同版本的构建机制。

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

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

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


推荐阅读