尝试通过Microsoft Visual Studio调试器运行程序,并在Command Arguments
字段的“项目”->“属性”->“配置属性”->“调试”中添加了参数。
我的一个参数包含字符串"<u>"
,Visual Studio将其更改为"<u xmlns="http://schemas.microsoft.com/developer/msbuild/2003">"
。这既是意料之外的,也是无益的。我的程序不希望也不希望传递所有这些多余的东西,而不是传递我要传递的字符串。
例如,有问题的参数为-nlp:"<u>"
,Visual Studio将其更改为-nlp:"<u xmlns="http://schemas.microsoft.com/developer/msbuild/2003>"
。预期的结果是它保持输入:-nlp:"<u>"
。这是一个示例,但是实际上有两个参数以这种方式受到影响。两者都通过添加相同的字符串来“增强”。如果使用其他值,则它们总是会以相同的方式受到影响。看来,用尖括号包围的任何弦线都是这种弦线修饰的合理选择。
如何配置Visual Studio不进行此更改?
我的VS版本详细信息是:-
Microsoft Visual Studio Ultimate 2012
版本11.0.61219.00更新5
答案 0 :(得分:1)
Visual Studio 2017或更高版本似乎不存在此问题(我尚未测试2013或2015)。
调试参数的存储方式取决于项目类型的程序包(C,C#,C ++等),即使它们都使用MsBuild系统也是如此。
此外,在没有人工干预的情况下,调试参数也不存储在项目文件(.csproj,.vcxproj等)中,而是存储在.user文件中(因此,每个用户可能有所不同)。
对于Visual Studio 2017,对于-nlp:"<u>"
之类的参数,对于C#项目,.user文件看起来像这样
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<StartArguments>-nlp:"<u>"</StartArguments>
</PropertyGroup>
</Project>
对于C ++项目,.user文件如下所示:
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerCommandArguments>-nlp:"<u>"</LocalDebuggerCommandArguments>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>
我们看到它们已正确转义,并且<
和>
被转换为各自的XML实体。
Visual Studio 2012的行为不同,因此必须手动转义XML。问题可能出在MsBuild中,而不仅仅是在Visual Studio中。如上所示,编辑适当的.user文件并手动转义<
和>
字符将在Visual Studio 2012中解决该问题。