Ich habe es schwer mit den XSD-Dateien.
Ich versuche, eine XSD-Datei aus einer Klasse zu erstellen:
public enum Levels { Easy, Medium, Hard }
public sealed class Configuration
{
public string Name { get;set; }
public Levels Level { get; set; }
public ConfigurationSpec { get;set;}
}
public abstract class ConfigurationSpec { }
public class ConfigurationSpec1
{
// ...
}
public class ConfigurationSpec2
{
// ...
}
Bitte beachten Sie, dass ich eine abstrakte Klasse innerhalb der Konfiguration habe. Ist es mit dieser Funktion möglich, die XSD zu erstellen und wenn möglich, wie?
Die Idee ist, die Klassenkonfiguration an das XSD zu übergeben.
Sie können XSD.exe
(Verfügbar in Ihrer Visual Studio-Installation.)
public sealed class Configuration
{
public string Name { get; set; }
public Levels Level { get; set; }
public ConfigurationSpec Spec { get; set; }
}
public abstract class ConfigurationSpec { }
public class ConfigurationSpec1 { }
public class ConfigurationSpec2 { }
ergebnisse in
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Levels" type="Levels" />
<xs:simpleType name="Levels">
<xs:restriction base="xs:string">
<xs:enumeration value="Easy" />
<xs:enumeration value="Medium" />
<xs:enumeration value="Hard" />
</xs:restriction>
</xs:simpleType>
<xs:element name="Configuration" nillable="true" type="Configuration" />
<xs:complexType name="Configuration">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="Level" type="Levels" />
<xs:element minOccurs="0" maxOccurs="1" name="Spec" type="ConfigurationSpec" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ConfigurationSpec" abstract="true" />
<xs:element name="ConfigurationSpec" nillable="true" type="ConfigurationSpec" />
<xs:element name="ConfigurationSpec1" nillable="true" type="ConfigurationSpec1" />
<xs:complexType name="ConfigurationSpec1" />
<xs:element name="ConfigurationSpec2" nillable="true" type="ConfigurationSpec2" />
<xs:complexType name="ConfigurationSpec2" />
</xs:schema>
Alles was Sie tun müssen, ist Ihre Assembly zu kompilieren und XSD.exe
mit dem Pfad zu Ihrer Assembly als Argument. XSD.exe /?
hat auch eine Liste aller Argumente.
Beispiel: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll
Sie können erfolgreich xsd.exe
In Visual Studio integrieren IDE wie folgt:
Gehen Sie in Tools, External Tools
Und klicken Sie auf Add Taste:
2010
2015/2017
Titel:
Schema aus Klasse erstellen
Befehl (pro Framework):
4.0
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64\xsd.exe
4.5.1
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\xsd.exe
4.6.*
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.* Tools\x64\xsd.exe
Argumente:
$(BinDir)$(TargetName).dll /outputdir:$(ItemDir) /type:$(ItemFileName)
Ausgabefenster verwenden:
Verhindert, dass ein zusätzliches Befehlsfenster angezeigt wird, und zeichnet die Ausgabe auf, bis Sie sie löschen. Wahrscheinlich eine gute Idee.
Aufforderung zur Eingabe von Argumenten:
Überprüfen Sie, ob Sie die Ausgabe testen oder Fehler beheben möchten. Andernfalls lassen Sie das Kontrollkästchen deaktiviert.
Klicken OK
Wie benutzt man:
XSD.exe
Betrachtet nur kompilierten Code.Tools, Create Schema From Class
Schema0.xsd
Sehen.Schema0.xsd
Und wählen Sie Include In Project
Schema0.xsd
In <the name of the class>.xsd
Umxsd
möglicherweise manuell bearbeiten, wenn Sie XML-Dateien im XML-Editor mit diesem Schema bearbeiten möchten und nicht alle Attribute verwenden. Sie können use="required"
Durch use="optional"
Ersetzen, um die blauen, wellenförmigen Linien im XML-Editor (die Warnungen erzeugen) zu entfernen, wenn diese Attribute tatsächlich nicht benötigt werden.