在Visual Studio中 - >调试 - >命令行参数 输入以下XML。
"<AppParameters><ConnectionString>Server=localhost;Database=MyDB;User Id=sa;Password=YouNameIt</ConnectionString></AppParameters>"
然后你用以下几行来读这个
DataSet parameter = new DataSet();
parameter.ReadXml(new StringReader(xmlParameter));
一切都很棒!
然后重新启动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>"
Visual Studio已更改命令行参数。
为什么?
答案 0 :(得分:0)
我正在调试 Python 模块并遇到同样的问题。超过半小时我疯了,但最后我得到了它。注意:
我正在使用 VS2k10 。
调试相关设置存储在 vcxproj.user 文件中(我将其称为 VUF )
在解决方案打开的同时,我开始删除 VUF 。打开项目属性页对话框,默认值为:
命令:$(TargetPath)
CommandArguments :
同时生成 VUF (我甚至不必关闭对话框)。这是它的内容(注意命名空间):
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>
然后我填充了上面的字段(不介意值):
命令:E:\WinOBT\1.0.0.0\OPSWpython\2.7.10\x64_d\python_d.exe
CommandArguments :-c "import _xmlrpc as _x;print _x.decode('<value><string>aaa</string></value>')"
关闭对话框(或按应用)后, VUF 内容变为:
<?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>
当 CommandArguments 成为:-c "import _xmlrpc as _x;print _x.decode('<value xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><string>aaa</string></value>')"
VS 将其设置存储在 xml 格式中(不是文件中的字符串表示,而是实际的 xml 树 - 解析字符串表示的结果)。好吧,我已经了解到解析 xml 字符串(将其转换为树),然后将树转换回字符串,将产生(在大多数情况下)与原始字符不同的结果字符串。
Here我描述了这种行为(好吧它是关于 Python 解析器,但我确信所有 - 或许多 - 表现相同)。
因此,我们在 xml (项目设置)中有一个 xml (我们希望以纯文本形式存储),这会让人感到困惑< em> VS 的解析器,当它试图解析它时,产生一种我认为奇怪的行为:
如果成功:
xmlns
属性,从而搞乱对话框中的原始 xml 文本,以及传递给程序时如果由于某种原因失败(例如 xml 无效):
在我环绕后,我找到了一种方法来部分克服这个问题(这是一种蹩脚的解决方法 - 或者是获得者):
手动修改 VUF ,将 xml 转换为CDATA section:
<?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>
重新加载解决方案(因为 VS 每次打开对话框时都没有读取 VUF ,因为它的内部树没有更改)
现在 xml 字符串已正确传递给可执行文件,并且也正确显示在项目属性页对话框中。 小心:如果您修改了对话框中的任何设置,它将触发VS重新加载(重新分析)数据,并且会再次弄乱它。