【问题标题】:Switching to Release Build causes runtime error in Web Reference切换到 Release Build 会导致 Web Reference 中出现运行时错误
【发布时间】:2010-10-02 21:48:44
【问题描述】:

我遇到了由 Visual Studio 2005 生成的 SOAP Web 引用的问题(.NET 框架是 v2.0.50727.42) - 它在 Debug 构建配置下工作正常(并且已经使用了几个月)但现在我想上线并使用 Release 配置进行编译,但它已停止工作。

每当我调用 Web Reference 上的方法时,都会在运行时引发异常。最常见的例外是:

System.InvalidOperationException: There was an error generating the XML document. ---> System.ArgumentException: Item has already been added. Key in dictionary: 'MayriseWebServices.RefuseService.PremiseSummaryStructure'  Key being added: 'MayriseWebServices.RefuseService.PremiseSummaryStructure'

项目和生成的 Web 参考的语言是 VB.NET 而不是 C#。由于生成的 Reference.vb 代码实际上并没有改变,只是构建类型,我在那里找不到任何东西,而且我显然无法调试 Release 构建。

我注意到 Release 版本从主版本中分离出 *.XmlSerializers.dll 程序集。是否存在已知问题?

出于显而易见的原因,我宁愿不使用 Debug 版本。也许我应该读一些关于 CodeDOM 的书,我一直想这样做!

我应该提到我找到了a post with reasons why a Release build will run differently,但它似乎专注于 C++。

感谢您提供的任何帮助。

更新:第三个关闭序列化程序集的建议已经解决了这个问题。我在高级编译选项中将“生成序列化程序集”设置从“自动”更改为“关闭”,我的测试现在通过了。我不知道那个设置。

我不确定序列化程序集的根本问题是什么。如果我有机会使用您在第二个建议中的建议调试 Release 程序集,我将提供更新。

【问题讨论】:

    标签: .net vb.net web-services serialization visual-studio-2005


    【解决方案1】:

    虽然我对如何解决此问题有一些想法,但我无法为您提供答案。

    1. 由于这是一个运行时错误,只发生在 RELEASE 构建而不是 DEBUG 构建中,我想知道 VB 编译器是否发出相同的 IL。您可能想要做的是编译您的 DEBUG 版本的程序集,然后编译 RELEASE 版本的程序集。一旦您拥有程序集的 DEBUG 和 RELEASE 版本,请使用 ILDASM.exe 执行这两个程序集的反汇编。将文件另存为文本并使用 WinDiff.exe 进行比较。这可能会或可能不会为您提供一些线索。
    2. 您可能希望更改 RELEASE 配置的项目设置以生成 PDB (/debug:pdbonly)。只要您从 Visual Studio 中启动进程,这将允许您进行调试。
    3. 生成的 *.XmlSerializers.dll 程序集旨在改进导致发生序列化的初始调用。作为故障排除步骤,您可以在项目属性的 RELEASE 配置中将其关闭,以查看您是否仍然遇到同样的问题。

    我希望这会有所帮助。

    【讨论】:

    • +1 表示第 3 点。关闭生成序列化程序集。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多