gpt4 book ai didi

xml - Visual Studio 更改调试 xml 命令行参数

转载 作者:数据小太阳 更新时间:2023-10-29 02:45:08 24 4
gpt4 key购买 nike

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

为什么?!

最佳答案

我正在调试一个 Python 模块,遇到了同样的问题。半个多小时我发疯了,但终于我明白了。备注:

  • 我正在使用 VS2k10

  • Debugging 相关设置存储在vcxproj.user 文件中(我将其称为VUF) .

在打开解决方案的同时,我开始删除 VUF。打开 Project Property Pages 对话框,那里有默认值:

  • 命令:$(TargetPath)

  • 命令参数:

同时 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 特殊字符

在我转了一圈之后,我找到了一种方法来部分克服这个问题(这是一个蹩脚的解决方法 - 或 gainarie):

  • 手动修改 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 字符串已正确传递给可执行文件,并且还正确显示在 Project Property Pages 对话框中。 注意:如果您在对话框中修改任何设置,将触发 VS 重新加载(重新解析)数据,它会再次搞砸。

关于xml - Visual Studio 更改调试 xml 命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com