为什么在我的 VS NMake 构建命令行中使用输出重定向时出现错误 MSB4025?

问题描述 投票:0回答:1

我使用 Visual Studio makefile 项目并在 vcxproj 文件的 NMakeBuildCommandLine 属性中有单独的构建命令。
当这些命令之一使用这样的输出重定向时:

echo "unwanted output"  >nul 2>&1

调用 msbuild 时出现构建错误:

all.vcxproj(53,30): error MSB4025: 

The project file could not be loaded. An error occurred while parsing EntityName. Line 53, position 30.


Die Projektdatei konnte nicht geladen werden. Beim Analysieren von 'EntityName' ist ein Fehler aufgetreten. Zeile 53, Position 30.

为什么?

我自己找到了解决方案,想在这里提供。

xml visual-studio project nmake output-redirect
1个回答
0
投票

只有在 vcxproj 文件中直接编辑

NMakeBuildCommandLine
才会发生此错误。
您也可以使用其他命令属性得到相同的错误。

原因是,

>
&
是无效的特殊字符。
MSBuild 帮助 中所述,需要转义特殊字符。
然而在这个帮助中
>
&
没有列出,尽管它们在XML元素中是无效的并且vcxproj是xml.

MSBuild 帮助说

要转义特殊字符,请使用语法 %,其中 表示字符的 ASCII 十六进制值。

表示替换

echo "unwanted output"  >nul 2>&1

echo "unwanted output"  %3enul 2%3e%261

通过尝试,我发现以下变体也有效:

echo "unwanted output"  >nul 2>&1
echo "unwanted output"  >nul 2>&1

有趣的是,之后只有最后两个变体在项目属性 > NMake > Build Command Line 中正确显示为

>nul 2>&1

直接编辑项目属性>NMake>Build Command Line,输入
>nul 2>&1
,VS将
>nul 2>&1
写入vcxproj。

而且由于最后一个变体比十六进制语法更具可读性,我也更喜欢这个。

我用 Visual Studio 17.2.5 测试过。


here也有类似的答案,但它既没有提到字符

>
(用于输出重定向但不包含在MSBuild帮助中)也没有提到NMakeBuildCommandLine(这是我遇到的问题来自(哪里)。
所以我决定提出这个新的问题和答案来帮助其他有类似问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.