Visual Studio更改debug xml命令行参数

时间:2014-07-02 13:01:44

标签: xml visual-studio command-line-arguments

在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已更改命令行参数。

为什么?

1 个答案:

答案 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 文本,以及传递给程序时
    • 它将在我们在 VUF
    • 中传递它时存储它
  • 如果由于某种原因失败(例如 xml 无效):

    • 它会在我们在对话框中传递它时存储(它会正确地将它作为参数传递给正在调试的可执行文件)
    • 它将逃脱 VUF中的 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重新加载(重新分析)数据,并且会再次弄乱它。