【发布时间】:2021-06-21 16:05:12
【问题描述】:
问:如何忽略 Visual Studio 自定义构建步骤中的错误并继续构建过程?
就我而言,我有一个 NodeJS 脚本,exec 是一个可执行文件,它可能存在也可能不存在,因为它将由第一次成功的构建运行构建。这是一个引导脚本,在该二进制文件交付之前对其进行伪装。
因此,那里会出现错误,所有错误都会被 NodeJS 脚本捕获并通过“伪装”来处理。
问题在于,Visual Studio 2019 在运行此脚本后,当它在记录 exec(或者更确切地说:process.execFileSync)输出时观察到它报告的任何错误时,会中止构建过程。如果我登录到 stderr 或 stdout 似乎并不重要。
不太相关,但对于好奇的人来说:这是 NodeJS 脚本。粗糙且准备就绪。
注意:为简洁起见,不重要的部分被剪掉:[...]。完整的脚本在@@@@
[...]
if (fs.existsSync(replCfile)) {
fs.unlinkSync(replCfile);
}
[...]
try {
if (fs.existsSync(mutoolExe)) {
const stdout = execFileSync(mutoolExe, ['qjsc', '-v', '-c', '-o', replCfile, replJSfile]);
console.log(stdout);
if (fs.existsSync(replCfile)) {
console.log("Successfully generated the repl C source file from repl.js");
}
else {
bootstrap();
}
}
else {
bootstrap();
}
} catch (ex) {
// Note this bit; it'll show up in the answer again!
console.log("COMPILE FAILED:", ex);
bootstrap(true);
}
[...]
function bootstrap(forced) {
if (forced) {
forced = "FORCED";
}
if (!fs.existsSync(replCfile) || forced) {
console.log(`BOOSTRAPPING ${ forced }: faking an empty repl C source file`);
fs.writeFileSync(replCfile, `
[...]
`, 'utf8');
}
[...]
process.exit(0);
}
调查:我尝试和查看的东西
-
Swallowing errors in pre-build steps in Visual Studio 2010 -- 没有骰子。
-
set ERRORLEVEL=0:投递失败。没有效果。 -
EXIT 0:同上。没有效果。 -
EXIT /B 0:没有效果。 (也可以看看 What are the ERRORLEVEL values set by internal cmd.exe commands? https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-ignore-errors-in-tasks?view=vs-2019 为什么:如果我没看错的话,/B会让退出代码通过。) -
... ContinueOnError="true"修补到.vcxproj文件任何地方:禁飞区!情况变得更糟:现在您的项目根本无法加载。
很明显,MS 认为构建前/构建后步骤和自定义构建步骤之间存在很大差异?不管怎样,我们再看看……
-
-
Using robocopy with Visual Studio 2010 Post-build and Pre-build events
我想:“哎呀,我在构建中使用 robocopy,让我们看看!”。没有骰子。相同的解决方案,没有用。
-
How to suppress initial post-build event error in Visual Studio 2017 (C#)?
那是最近的!但是……
我没有像这样的
.vcxproj中的<Target>。 (C# 与 C/C++ 项目文件 XML 的差异。)为了好玩而摇晃了几下,但又一次:没有工作。这开始烦人了。Microsoft 文档怎么样?
-
https://docs.microsoft.com/en-us/cpp/build/troubleshooting-build-customizations?view=msvc-160 ...及其周围环境。没什么用。故障排除就这么多。
-
还花了几分钟绝望地浏览 Microsoft DevStudio 论坛,但像往常一样,如果您想找到有用的东西,忘记整个竞技场并直接进入 SO。 叹息。
-
很多不值得一提
好奇的观察(提示答案)
无论我做什么,结果总是:
-
✅没有任何错误,✅快乐构建,我们很好✅。
这仅在对已编译的二进制文件进行核对后发生,即销毁 NodeJS 脚本正在寻找的
muToolExe并尝试exec。或者当我取出
execFileSync调用时,从而破坏了引导脚本。 -
❌错误很多,❌构建立即中止,❌不好❌。
这里唯一的变量是您将在 Visual Studio
Errors选项卡中报告多少错误。 (当然,您也可以在Output选项卡中看到这些内容,但根据您刚刚所做和弄乱的内容,您会收到 1(一)错误或 2(二)错误。从不(0)零。
顺便说一句,您使用的是哪个版本的 DevStudio?
v16.10.2 - 这是撰写本文时 DevStud2019 的最新更新。
我怀疑不过,所有 2019 版本都受此影响。我不想降级只是为了验证这一点,所以 YMMV。
【问题讨论】:
标签: visual-studio