Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Import DataContractSerializer元数据导出。相关模式_Import_Xsd_Schema_Datacontractserializer_Svcutil.exe - Fatal编程技术网

Import DataContractSerializer元数据导出。相关模式

Import DataContractSerializer元数据导出。相关模式,import,xsd,schema,datacontractserializer,svcutil.exe,Import,Xsd,Schema,Datacontractserializer,Svcutil.exe,我正在使用svcutil.exe导出程序集的数据协定。它会生成一组xsd文件,这些文件相互包含,如下所示: <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" /> <xs:import namespace="http://schemas.datacontract.org/2004/07/System.Reflection" /> <xs:import name

我正在使用svcutil.exe导出程序集的数据协定。它会生成一组xsd文件,这些文件相互包含,如下所示:

<xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/System.Reflection" />
  <xs:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/System" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/UBP.Business.Core" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/UBP.Core" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/UBP.Collection" />
  <xs:import namespace="http://schemas.datacontract.org/2004/07/System.Data" />


在我看来,这个util假设所有模式都在服务器上发布,每个模式都可以通过指定的超链接访问。但如果我在Altova XMLSpy中单独打开每个模式,它将报告找不到导入模式的错误。所以我的问题是,如何发布生成的模式,以便它们彼此可见?或者可能还有其他选择?

生成的模式不是通过超链接相互引用的,而是通过相对路径引用的。您应该发现,其中一个模式文件将是“主”模式文件,只要所有模式文件都存在,当您在XMLSpy中打开它时,其他模式的所有相对路径都将解析,并且模式应该可以正常打开

更新

我最初的回答实际上是误导性的,事实上是不正确的。架构中没有定义相对路径。这些文件仅通过名称空间相互引用

因此,一个模式中定义的类型可以在另一个模式中使用,方法是包含对该类型命名空间的引用

忘了我说的其他一切吧(所有关于相对路径的东西都是废话,我回答的时候没有思考清楚——为此道歉)

由于这些模式是从定义了许多相互依赖类型的程序集生成的,因此生成的模式包含这些类型的XSD等价物也具有高度的相互依赖性,因此所有导入语句都是如此

但是,通过引用这些名称空间,您可以创建新的XSD模式,这些模式使用这些生成的模式中定义的类型

您询问的名称空间(http://schemas.microsoft.com/2003/10/Serialization/)不处理资源;相反,它支持重用在此命名空间下定义的类型。您可能会在模式的根目录中看到一个对应的xmlns属性,该属性将定义从该名称空间引用类型时要使用的前缀


我希望这是清楚的。

您能发布您正在使用的svcutil命令吗?不,相关架构没有解析!尽管它们位于同一目录中。我认为这是因为import指令不包括文件的路径。它是自动生成的,我不知道如何影响它,我认为你不太正确。svcutil生成与dll中存在的名称空间集对应的文件集。例如,我在名称空间UBP.Common中有自己的类。它依赖于命名空间System.Data中的类(“导入”)。导出元数据后,我们得到两个文件:System.Data.xsd和UBP.Common.xsd。最后一个将包括在第一个文件中定义的命名空间的import指令。但第二个文件将不是有效的xsd文件,因为import指令不包括指向该名称空间定义的文件的指针!错误是:“无法加载具有目标命名空间的架构”ps:感谢您一直关注我的问题;)关于
标记的事情-它确实包含一个
schemaLocation
属性,您可以在其中包含导入的架构文件的相对路径。但是,这是一个完全可选的属性。我猜一些解析器需要知道路径,而其他解析器可以扫描本地目录等以查找模式。我可以确认一下,在XmlSpy?XmlSpy和Visual Studio xsd viewer中打开System.Data.xsd架构文件时遇到问题。我的问题是关于这个SchemaLocation属性。我不明白为什么不指定它,因为xml编辑器不知道这个名称空间对应什么文件。恐怕除了手动指定这些schemalocation属性外,我没有其他解决方案,这非常不方便。因为,我可以经常重新生成这些文件,而且文件的数量可能非常巨大。所以我需要编写第三个应用程序来完成这项工作。。。