MSBuild构建报MSB4062错:SetEnv任务无法从指定程序集加载
错误成因
你遇到的MSB4062报错本质是多版本Visual Studio共存环境下的C++构建任务程序集加载不匹配问题:
- 你当前调用的MSBuild版本为14.0.25420.1,是Visual Studio 2015附带的构建工具版本
- 构建过程中加载了路径下的v4.0版本
Microsoft.Cpp.targets文件,该文件依赖Microsoft.Build.CppTasks.Common4.0版本程序集来加载SetEnv环境变量配置任务,但当前MSBuild的程序集搜索路径下找不到对应版本的依赖文件,或是版本绑定关系错位,直接导致任务加载失败 - 你之前尝试的npm相关修复方案仅适用于node-gyp触发的C++依赖构建场景,和直接通过MSBuild构建Visual Studio解决方案的场景不匹配,因此执行无效。
可行修复方案
按优先级从高到低尝试以下方案即可解决问题:
方案1:使用对应版本的VS开发者命令行执行构建(最稳妥)
多版本VS共存时直接调用全局路径下的MSBuild极易出现路径匹配错误,优先使用VS自带的预配置终端:
- 如果目标解决方案是适配VS2015的旧项目:从开始菜单打开VS2015 开发人员命令提示终端,进入项目目录后执行构建命令
msbuild .\folder1\WxsGenerators.sln,该终端会自动配置所有C++构建任务的程序集搜索路径,不会出现依赖缺失问题 - 如果目标解决方案是适配VS2019的项目:不要使用14.x版本的MSBuild,从开始菜单打开VS2019 开发人员命令提示终端,该终端默认调用16.x版本的MSBuild,会自动匹配对应版本的C++构建目标文件,不会加载不兼容的v4.0旧版targets文件
方案2:配置MSBuild程序集绑定重定向
按以下步骤操作即可完成.config文件配置:
- 定位当前调用的14.0版本MSBuild.exe所在目录,默认安装路径为
C:\Program Files (x86)\MSBuild\14.0\Bin\,如果是自定义安装路径可通过资源管理器搜索对应版本的MSBuild.exe确认位置 - 检查该Bin目录下是否存在
MSBuild.exe.config文件,不存在则新建该xml格式配置文件,存在则直接打开编辑 - 在文件的
<configuration>根节点下添加如下绑定重定向配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Build.CppTasks.Common" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="4.0.0.0" newVersion="14.0.0.0"/> </dependentAssembly> </assemblyBinding> </runtime>
- 保存文件后重新打开命令行,再次执行构建命令即可。
方案3:修正项目中写死的旧版Targets引用路径
如果上述方案无效,可检查报错中提到的TomtecWxs.vcxproj项目文件:
- 用文本编辑器打开vcxproj文件,搜索
Microsoft.Cpp.targets的引用配置,如果路径写死指向你项目目录下自带的D:\Dev\Views\YY261307_main_sv\microsoft\MSBuild\Microsoft.Cpp\v4.0\旧版targets文件,将路径修改为本机VS2015安装目录下的对应targets文件即可,默认路径为C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.targets
注意:不要将任意版本的MSBuild路径设置为全局系统环境变量的最高优先级,否则极易触发不同版本构建工具、目标文件、任务程序集的匹配冲突。
内容的提问来源于stack exchange,提问作者POVR2
相关产品推荐
相关产品推荐

