VisualStudio更改调试xml命令行参数
在Visual Studio->调试->命令行参数中 输入以下XMLVisualStudio更改调试xml命令行参数,xml,visual-studio,command-line-arguments,Xml,Visual Studio,Command Line Arguments,在Visual Studio->调试->命令行参数中 输入以下XML "<AppParameters><ConnectionString>Server=localhost;Database=MyDB;User Id=sa;Password=YouNameIt</ConnectionString></AppParameters>" 一切都很好 然后重新启动Visual Studio,在启动项目后,将出现以下错误: System.Xml.dll中发生
"<AppParameters><ConnectionString>Server=localhost;Database=MyDB;User Id=sa;Password=YouNameIt</ConnectionString></AppParameters>"
一切都很好
然后重新启动Visual Studio,在启动项目后,将出现以下错误:
System.Xml.dll中发生类型为“System.Xml.XmlException”的未处理异常
当然,第一次,你会花一些时间调查发生了什么。第一个建议当然是你的错。但是你会看到:
"<AppParameters xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><ConnectionString>Server=localhost;Database=MyDB;User Id=sa;Password=YouNameIt</ConnectionString></AppParameters>"
“服务器=localhost;数据库=MyDB;用户Id=sa;密码=YouNameIt”
Visual Studio已更改命令行参数
为什么 我正在调试一个Python模块,遇到了同样的问题。半个多小时我都发疯了,但最后我终于明白了。注:
- 我正在使用VS2k10
- 与调试相关的设置存储在vcxproj.user文件中(我将其称为VUF)
- 命令:
$(TargetPath)
- 命令参数:
-c“导入xmlrpc为打印解码('aaa')”
正如我们所知,VS以xml格式存储其设置(不是文件中的字符串表示,而是解析字符串表示的实际xml树)。我了解到,解析xml字符串(将其转换为树),然后将树转换回字符串,将(在大多数情况下)产生与原始字符串不同的结果
我描述了这种行为(这是关于Python解析器的,但我确信所有或许多解析器的行为都是相同的)
因此,我们在xml(项目设置)中有一个xml(我们希望以纯文本形式存储),当VS的解析器试图解析它时,它会混淆它,产生一种我认为很奇怪的行为:
- 如果成功:
- 它将添加
属性,从而在对话框中以及传递给程序时弄乱原始xml文本xmlns
- 当我们在VUF中传递它时,它将存储它
- 它将添加
- 如果由于某种原因失败(例如xml无效):
- 当我们在对话框中传递它时,它将被存储(并且它将作为参数正确地传递给正在调试的可执行文件)
- 它将逃避VUF中的xml特殊字符
- 手动修改VUF,将xml转换为:
E:\WinOBT\1.0.0.0\OPSWpython\2.7.10\x64\u d\python\u d.exe WindowsLocalDebugger $(OutDir)
- 重新加载解决方案(因为VS不会在每次打开对话框时读取VUF,因为其内部树没有更改)
现在,xml字符串被正确地传递给可执行文件,并正确地显示在“项目属性页”对话框中当心:如果您在对话框中修改任何设置,将触发VS重新加载(重新分析)数据,并将再次将其弄乱。有没有理由不使用App.config/Web.config文件存储项目连接字符串?您确定可以在命令行中使用此类特殊字符?即使被引用,这也不是通常在命令行中传递的类型,因此如果在这样做时遇到问题,我并不感到惊讶。至于更改原因:可能是因为VS编写了XML来保存它,而编写XML持久性代码是为了将MSBuild命名空间添加到XML中。@Jontas:因为它必须在运行前动态传递给应用程序。@Adriano Repetti:是的,我已经在生产环境中对它进行了测试,并且工作正常。
"<AppParameters xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><ConnectionString>Server=localhost;Database=MyDB;User Id=sa;Password=YouNameIt</ConnectionString></AppParameters>"
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommand>E:\WinOBT\1.0.0.0\OPSWpython\2.7.10\x64_d\python_d.exe</LocalDebuggerCommand>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommandArguments>-c "import _xmlrpc as _x;print _x.decode('<value><string>aaa</string></value>')"</LocalDebuggerCommandArguments>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommand>E:\WinOBT\1.0.0.0\OPSWpython\2.7.10\x64_d\python_d.exe</LocalDebuggerCommand>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LocalDebuggerCommandArguments><![CDATA[-c "import _xmlrpc as _x;print _x.decode('<value><string>aaa</string></value>')"]]></LocalDebuggerCommandArguments>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>
</PropertyGroup>
</Project>