2012-04-04 30 views
38

Mam trudności z plikami XSD.Jak utworzyć schemat XSD z klasy?

Próbuję utworzyć plik XSD z klasy:

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 
{ 
    // ... 
} 

Należy pamiętać, że mam klasę abstrakcyjną wewnątrz Configuration. Czy dzięki tej funkcji można utworzyć XSD i czy jest to możliwe?

Ideą jest przekazanie konfiguracji klasowej do XSD.

+0

Można użyć bezpłatnego [narzędzia do definiowania schematów XML (Xsd.exe)] (http://msdn.microsoft.com/en-us/library/x6c1kb0s.aspx). –

Odpowiedz

26

Można użyć XSD.exe (Dostępny od Visual Studio instalacji.)

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 { } 

skutkuje

<?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> 

Wszystko co musisz zrobić, to kompilacji montaż i uruchomienie XSD.exe ze ścieżką do Zgromadzenie jako argument. XSD.exe /? zawiera również listę wszystkich argumentów.

Przykład: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll

+1

Czy możesz mi powiedzieć, jakie kroki podjąłeś, aby je wygenerować? –

+0

Rzuca mi: Błąd - Nie można załadować pliku lub zespołu 'file: /// C: /../test.exe' lub jednej z jego zależności. Podjęto próbę załadowania programu o nieprawidłowym formacie. –

+1

@ DarfZon spróbuj zmienić go na tę samą architekturę, co system operacyjny (x64, x86). – Peter

57

można skutecznie zintegrować xsd.exe w Visual Studio IDE jak ten:

idź do Tools, External Tools i kliknij Dodaj przycisk:

enter image description here

2015/2017

enter image description here

Tytuł:

Tworzenie schematu z klasy

Command (za ram):

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

Argumenty:

$(BinDir)$(TargetName).dll /outputdir:$(ItemDir) /type:$(ItemFileName)

Stosowanie okna wyjściowego:

Zapobiega dodatkowe okno poleceń od pojawiały się i rejestruje wyjściu aż to wyczyścisz. Prawdopodobnie dobry pomysł.

Prompt argumentów:

Sprawdź, czy chcesz przetestować wyjście lub rozwiązać; w przeciwnym razie pozostaw niezaznaczone.

Kliknij OK

Jak używać:

  1. Kompilacja projektu!XSD.exe sprawdza tylko skompilowany kod.
  2. Kliknij klasę w Solution Explorer.
  3. Kliknij Tools, Create Schema From Class
  4. Kliknij na Pokaż wszystkie pliki przycisk w Eksploratorze Rozwiązanie.
  5. Zobacz w tym samym folderze co twoja klasa, a zobaczysz Schema0.xsd.
  6. prawym przyciskiem myszy na Schema0.xsd i wybierz Include In Project
  7. Rename Schema0.xsd do <the name of the class>.xsd
  8. (opcjonalnie) Być może trzeba zmienić tę nową xsd przez strony, jeśli chcesz edytować pliki XML w edytorze xml za pomocą tego schematu i cię nie używają wszystkich atrybutów. Możesz zastąpić use="required" z use="optional", aby pozbyć się niebieskich falistych linii w edytorze xml (które tworzą ostrzeżenia), jeśli w rzeczywistości te atrybuty nie są wymagane.
+2

Nie zapomnij kroku ** 1 Kompiluj **, podczas użytkowania, tak jak ja.Zajęło mi trochę czasu, aby zdać sobie sprawę: $ –

+1

@ R.Schreurs, podkreślenia dodane. Dzięki! – toddmo

+0

Ta odpowiedź jest bardzo miła. Dzięki. Czy Twoim zdaniem możliwe jest dodanie komentarzy zapisanych w klasie również do pliku wyjściowego XSD? – theLaw