C#生成类到名称空间

时间:2018-11-07 09:13:28

标签: c# xsd

我猜答案是否定的,但是有一种方法可以将生成的类移动到其他名称空间吗?

背景:

我有一个XSD文件,该文件定义了一个类,该类通过xsd.exe转换为C#类。默认情况下,xsd.exe将类放入全局名称空间:

XSD:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema
    elementFormDefault="qualified"
    xmlns:mstns="http://tempuri.org/XMLSchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
  <xs:complexType name="Delays">
    <xs:sequence>
      <xs:element name="Delay" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:double">
              <xs:attribute name="function" type="xs:string"/>
            </xs:extension>            
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="Driver">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Delays" type="Delays" minOccurs="1" maxOccurs="1"/>
      </xs:sequence>
      <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>
  </xs:element>

</xs:schema>

生成的类:

//------------------------------------------------------------------------------
// <auto-generated>
//     Dieser Code wurde von einem Tool generiert.
//     Laufzeitversion:4.0.30319.42000
//
//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
//     der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------

using System.Xml.Serialization;

// 
// Dieser Quellcode wurde automatisch generiert von xsd, Version=4.6.1055.0.
// 


/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public partial class Driver {

    private DelaysDelay[] delaysField;

    private string nameField;

    /// <remarks/>
    [System.Xml.Serialization.XmlArrayItemAttribute("Delay", IsNullable=false)]
    public DelaysDelay[] Delays {
        get {
            return this.delaysField;
        }
        set {
            this.delaysField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string name {
        get {
            return this.nameField;
        }
        set {
            this.nameField = value;
        }
    }
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class DelaysDelay {

    private string functionField;

    private double valueField;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string function {
        get {
            return this.functionField;
        }
        set {
            this.functionField = value;
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlTextAttribute()]
    public double Value {
        get {
            return this.valueField;
        }
        set {
            this.valueField = value;
        }
    }
}

我希望该类位于自定义名称空间中。但是,.cs文件的生成不在我的控制范围内。编辑生成的.cs文件是一种不好的做法,而且.cs文件也不属于SCM。 “ Driver”类也扩展到存储在SCM中的单独文件中。

因此,无论如何,都可以将类移到没有

的自定义名称空间中
  1. 编辑生成的代码吗?
  2. 修改世代吗?
  3. 修改对xsd.exe的调用?

2 个答案:

答案 0 :(得分:1)

要更改所生成类的名称空间,您需要将附加的parameter传递给xsd.exe调用:

  

/ n [amespace] **:** namespace指定运行时名称空间   生成的类型。默认名称空间是架构。

重新生成类后,您还需要将该类的其他部分移动到新的名称空间。

答案 1 :(得分:0)

好的,我想出了一个解决方法...

我只是从生成的类继承,并在自己的代码中使用MyDriver而不是Driver:

ab.b