【发布时间】:2018-11-07 09:13:27
【问题描述】:
我猜答案是否定的,但有没有办法将生成的类移动到不同的命名空间?
背景:
我有一个定义类的 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 中。
那么,有没有办法将类移动到没有
的自定义命名空间中- 编辑生成的代码?
- 修改世代?
- 修改对 xsd.exe 的调用?
【问题讨论】:
-
“有没有办法将(部分)类移动到不同的命名空间?”不,一个类肯定属于一个命名空间。如果该类属于不同的命名空间,您将如何引用它?
-
问题是,他能不能改变生成代码的命名空间。对于这个问题,部分内容令人困惑且不必要。
-
您是否看到stackoverflow.com/questions/1843209/… 了解如何为生成的类指示命名空间?
-
@HimBromBeere - 这些“选项”之前基本上是“我做不到:”
-
他们一直有“但是 .cs 文件的生成不在我的控制范围内”,我认为这已经意味着更改对 xsd 的调用是不可能的。就我而言,明确的编辑是对问题中已有内容的澄清。