基本的XSD导入和xsd.exe?

时间:2013-09-02 08:20:50

标签: visual-studio-2012 xsd xsd-validation xsd.exe

我有另一个包含共享类型的主xsd(它们在同一目录中)。

这是主要标题:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      xmlns:tns="XMLSchema_Module.xsd"
      xmlns:cs="XML_Common"
      targetNamespace="XMLSchema_Module.xsd"
      elementFormDefault="qualified">

  <xsd:import schemaLocation="XML_Common.xsd" namespace="XML_Common"/>

这是共享类型1的标题:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
      targetNamespace="XML_Common"
      elementFormDefault="qualified">

这是我想在主模式的属性中使用的共享类型枚举:

  <xsd:simpleType name="TypesType">
    <xsd:restriction base ="xsd:token">
      <xsd:enumeration value="int"/>

以下是主要参考文献:

 <xsd:attribute name="Type" type="cs:TypesType"/>

我正在使用xsd.exe生成序列化类(在构建过程中作为预构建事件集成)。这些xsd是使用VisualStudio构建的。

<Exec Command="&quot;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\xsd.exe&quot; XSchemas\XMLSchema_Module.xsd /c /o:SerializationClasses /n:ScenarioManager" /> 

我正在翻译我获得的实际信息:

The type XML_Common:TypesType is not declared or is not a simple type.

这似乎是一个导入问题,但我不知道如何解决它。

2 个答案:

答案 0 :(得分:5)

我的不好,似乎xsd.exe无法解析架构导入。 来自this article

  

现在已经在另一个文件中定义了类型,xsd.exe将会   如果您尝试创建创建请求,则会生成此错误   XML:C:\ Solution \ Project&gt; xsd.exe Request.xsd / c架构验证   警告:未声明类型“http://www.Example.com/Types:Meeting”。   警告:无法验证架构。类生成可能会失败或   可能会产生错误的结果错误:生成类的错误   schema'C:\ Solution \ Projects \ Request'。

     
      
  • 缺少数据类型“http://www.Example.com/Types:Meeting”。如果您需要更多帮助,请输入“xsd /?”。这是由于   事实上,xsd.exe不使用schemaLocation提示来查找   导入的架构。您必须将其作为参数包含在内。在你的   xsd.exe调用:C:\ Solution \ Project&gt; xsd.exe Types.xsd Request.xsd / c
  •   

答案 1 :(得分:2)

应该强调的是,尽管对LB40的答案持悲观态度,但它的最后一句话会产生解决方案:在你的xsd.exe调用中你必须将引用的xsd作为参数包含在引用xsd:

C:\ Solution \ Project&gt; xsd.exe Types.xsd Request.xsd / c

这将生成一个包含两个模式的类的单个cs源文件。