如何正确修改生成的XSD以克服导致异常的已知.Net错误;cs0030:无法生成临时类“;

如何正确修改生成的XSD以克服导致异常的已知.Net错误;cs0030:无法生成临时类“;,.net,web-services,visual-studio-2008,exception,xsd,.net,Web Services,Visual Studio 2008,Exception,Xsd,我的任务是向第三方web服务发送数据,他们提供了一个测试服务,该服务已被证明可以与Java客户机一起工作,但是,它不在.Net中 当我生成服务代理并实例化服务或序列化请求对象时,会出现以下错误: Unable to generate a temporary class (result=1). error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' to 'TestStarX

我的任务是向第三方web服务发送数据,他们提供了一个测试服务,该服务已被证明可以与Java客户机一起工作,但是,它不在.Net中

当我生成服务代理并实例化服务或序列化请求对象时,会出现以下错误:

Unable to generate a temporary class (result=1). 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' to 'TestStarXML.wsStarService.VSOptionInclusiveSetType' 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.VSOptionConflictSetType[]' to 'TestStarXML.wsStarService.VSOptionConflictSetType'
error CS0030: Cannot convert type 'TestStarXML.wsStarService.ColorRequirementSetType[]' to 'TestStarXML.wsStarService.ColorRequirementSetType' 
error CS0030: Cannot convert type 'TestStarXML.wsStarService.ColorExclusionSetType[]' to 'TestStarXML.wsStarService.ColorExclusionSetType' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.VSOptionInclusiveSetType' to 'TestStarXML.wsStarService.VSOptionInclusiveSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.VSOptionConflictSetType' to 'TestStarXML.wsStarService.VSOptionConflictSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.ColorRequirementSetType' to 'TestStarXML.wsStarService.ColorRequirementSetType[]' 
error CS0029: Cannot implicitly convert type 'TestStarXML.wsStarService.ColorExclusionSetType' to 'TestStarXML.wsStarService.ColorExclusionSetType[]'
向我们发送此服务的第三方使用Java,他们从测试服务生成服务代理没有问题。到目前为止,我的理解是.Net()为WSDL文件生成XSD时存在一个bug

在回答中,它提到使用虚拟属性修改生成的XSD,因此我按照建议添加了虚拟属性:

<xs:complexType name="VSInclusivesOptionType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="VSOptionInclusiveSet" type="tns:VSOptionInclusiveSetType" />
    </xs:sequence>
    <xs:attribute name="tmp" type="xs:string" />   <!-- this is all I have added (for each of the types in the exception message) -->
  </xs:complexType>
  <xs:complexType name="VSOptionInclusiveSetType">
    <xs:sequence>
      <xs:element minOccurs="0" name="SetID" type="ns2:IdentifierType" />
      <xs:element minOccurs="0" name="NumberOfOptionsNumeric" type="xs:decimal" />
      <xs:element minOccurs="0" maxOccurs="unbounded" name="VSOption2" type="tns:VSOption2Type" />
    </xs:sequence>
  </xs:complexType>

添加dummy属性的唯一目的是将项目的编译时间从几分钟减少到几秒钟


除此之外,VS2008似乎没有注意到这些变化——我仍然无法序列化对象或实例化服务,而不会得到上面提到的异常,我遗漏了什么或做错了什么?

你是对的,这是WSDL工具中的错误。要更正此错误,您应该打开生成的文件,并将一些“TestStarXML.wsStarService.VSOptionConflictSetType”更改为“TestStarXML.wsStarService.VSOptionConflictSetType[]”


当你跑步时,你可以很容易地找到哪一个。当您更改了类型后,服务将正常运行。

您必须像我的问题中那样更改XSD文件,但您还必须修改同一文件夹中的Reference.cs(或.vb)文件-我在[]上用[](或在vb.net中用()替换了())


在我所做的所有阅读中,没有一个答案说两者都可以,所以我没有抓住要点-我希望这个答案对其他人有所帮助。

只是一个检查问题,因为看起来你已经完全实现了链接帖子中推荐的解决方案。是否可能VSInclusiveOptionType的问题已经解决,您现在正在处理错误消息中引用的其他(3)数据类型的嵌套?(VSOptionConflictSetType;ColorRequirementSetType;ColorExclutionSetType)?@dcbyers我已对所有4种类型实施了上述更改。如您所见,文件中似乎没有[]。因此,这不是简单地删除它们的情况?reference.cs是文件,或者如果您是手动生成的(wsdl工具),则应该编辑输出文件。我不确定您是否必须添加或删除[]。正如我正确地记得的,它在一个类定义行中。谢谢同行,你引导我找到了答案,所以+50谢谢你的问题和答案。2016年这里仍然存在错误:)