代码之家  ›  专栏  ›  技术社区  ›  Martin Owen

切换到发布版本会导致Web引用中的运行时错误

  •  2
  • Martin Owen  · 技术社区  · 16 年前

    我遇到了一个由Visual Studio 2005生成的SOAP Web引用的问题(.NET Framework是v2.0.50727.42)-它在调试生成配置下工作正常(已经运行了几个月),但现在我想上线并使用发布配置进行编译,它已停止工作。

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

    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代码实际上并没有改变,只是构建类型,所以我在那里找不到任何内容,显然我无法调试发布版本。

    我注意到发布版本从主版本中分离了一个*.xmlserializers.dll程序集。这有已知的问题吗?

    出于明显的原因,我宁愿不使用调试构建。也许我应该读些关于codedom的书,我一直想读!

    我应该说我找到了 a post with reasons why a Release build will run differently 但是它似乎集中在C++上。

    谢谢你的帮助。

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

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

    1 回复  |  直到 16 年前
        1
  •  4
  •   Philippe    16 年前

    虽然我对如何解决这个问题有一些想法,但我没有答案。

    1. 因为这是一个运行时错误,只发生在发布版本中,而不是调试版本中,所以我想知道VB编译器是否发出相同的IL。您可能需要编译程序集的调试版本,然后编译程序集的发布版本。一旦同时拥有程序集的调试版本和发布版本,请使用ildasm.exe对两个程序集执行disassembly。将文件保存为文本,并使用windiff.exe进行比较。这可能给你提供或不提供一些线索。
    2. 您可能希望更改发布配置的项目设置以生成PDB(/debug:pdbonly)。这将允许您调试,只要您从Visual Studio中启动该进程。
    3. 生成的*.xmlserializers.dll程序集旨在改进导致序列化发生的初始调用。作为一个故障排除步骤,您可以在项目属性的发布配置中关闭它,以查看您是否仍然有相同的问题。

    我希望这有帮助。