Visual Studio 2022中VB.NET应用MSBuild参数配置及报错解决
在Visual Studio 2022中为VB.NET应用指定MSBuild参数的位置及相关问题排查
问题描述
- 我正在用Visual Studio 2022开发VB.NET应用,遇到间歇性MSBuild报错:
MSbuild error child node 2 exited prematurely. shutting down...
- 想在MSBuild命令里添加
/nodeReuse:false参数,但找不到设置的位置和方法。 - 考虑过在项目文件的XML中设置,但没找到明确的参考方案。
已排查内容
- 未找到在
*proj文件中设置MSBuild参数的方法,本来这是为每个项目目标存储参数的理想方式。 - 可以在Windows 10中设置
MSBUILDDISABLENODEREUSE=1环境变量,效果和/nodeReuse:false一致,但要启用/nodeReuse:true时得修改这个变量。 - Hans Passant给出的建议:
工具>选项>项目和解决方案>生成并运行>“最大并行项目生成数”=1
- 通过事件查看器发现,网络反恶意软件应用捕获到以下内容:
msbuild.exe尝试替换进程"?\globalroot\Device\NamedPipe..."中的基础可执行代码
这说明存在无文件方式投递远程访问工具的尝试。
- Jonathan Dodds针对
MSBUILDDISABLENODEREUSE环境变量给出了有用的评论。 - 把出现问题的同一解决方案放到Visual Studio 2017中重新构建,经过五次完整重新构建后,未出现报错,且CarbonBlack也没在应用日志里记录任何问题:
- 用Visual Studio 2017构建时,没有出现Visual Studio 2022中MSBuild触发的CarbonBlack问题记录。
- 用Visual Studio 2017构建时,未出现
MSbuild error child node 2 exited prematurely. shutting down...报错。
即便如此,不能认定Visual Studio 2022是确切原因。需要开展测试和研究,来确定这是CarbonBlack的误报还是真实问题。可能的原因包括:
- CarbonBlack的误报
- Visual Studio 2022与其他设置的组合影响
- 攻击者通过MSBuild无文件投递
Remcos RAT或其他载荷的真实攻击
实验设计(DOE)有助于排查这个问题。
DOE是一种结构化方法,能确定导致问题的单一因素或两个及以上因素的组合。通常测试遵循一次改变一个变量的逻辑,但这种方法无法识别由两个及以上因素组合导致的问题。
内容的提问来源于stack exchange,提问作者Doug Kimzey
相关产品推荐
相关产品推荐

