切换到Release Build会导致Web Reference中出现运行时错误

时间:2009-01-22 12:42:07

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

我遇到了由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 Reference是VB.NET而不是C#。由于生成的Reference.vb代码实际上没有改变,只是构建类型,我在那里找不到任何东西,我显然无法调试Release版本。

我注意到Release版本从主构建中拆分了* .XmlSerializers.dll程序集。这有问题吗?

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

我应该提一下,我发现a post with reasons why a Release build will run differently但它似乎专注于C ++。

感谢您提供任何帮助。

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

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

1 个答案:

答案 0 :(得分:4)

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

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