2012-04-04 16 views
38

मुझे एक्सएसडी फाइलों के साथ कठिन समय है।कक्षा से एक्सएसडी स्कीमा कैसे बनाएं?

मैं एक वर्ग से एक XSD फ़ाइल बनाने के लिए कोशिश कर रहा हूँ:

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

कृपया ध्यान दें कि मैं विन्यास के अंदर एक अमूर्त वर्ग की है। उस सुविधा के साथ, क्या एक्सएसडी बनाना संभव है और यदि यह संभव है तो कैसे?

विचार क्लास कॉन्फ़िगरेशन को एक्सएसडी में पास करना है।

+0

आप मुफ्त [एक्सएमएल स्कीमा डेफिनिशन टूल (Xsd.exe)] (http://msdn.microsoft.com/en-us/library/x6c1kb0s.aspx) का उपयोग कर सकते हैं। –

उत्तर

26

आप उपयोग कर सकते हैं XSD.exe (अपने दृश्य स्टूडियो स्थापना से उपलब्ध।)

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

परिणाम

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

में आपको बस इतना अपने विधानसभा संकलन जाता है और करने के लिए पथ के साथ XSD.exe चलाने के लिए है अपने तर्क के रूप में असेंबली। XSD.exe /? में सभी तर्कों की एक सूची भी है।

उदाहरण: XSD.exe C:\Dev\Project1\Bin\Debug\library.dll

+1

क्या आप मुझे बता सकते हैं कि इसे उत्पन्न करने के लिए आपने किन कदमों का पालन किया? –

+0

यह मुझे फेंकता है: त्रुटि - फ़ाइल या असेंबली 'फ़ाइल लोड नहीं हो सका: /// सी: /../test.exe' या इसकी निर्भरताओं में से एक। एक गलत प्रारूप के साथ एक प्रोग्राम लोड करने के लिए एक प्रयास किया गया था। –

+1

@DarfZon इसे अपने ओएस (x64, x86) के समान वास्तुकला में बदलने की कोशिश करें। – Peter

57

आप सफलतापूर्वक इस तरह विजुअल स्टूडियो IDE में xsd.exe एकीकृत कर सकते हैं: Tools, External Tools में

जाओ और क्लिक बटन जोड़ें:

enter image description here

2015/2017

enter image description here

शीर्षक:

कक्षा से स्कीमा बनाएं

कमान (ढांचे के अनुसार):

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

तर्क:

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

उपयोग आउटपुट खिड़की:

अप पॉपिंग से एक अतिरिक्त कमांड विंडो को रोकता है और जब तक उत्पादन का रिकॉर्ड रखता आप इसे साफ़ करते हैं। शायद एक अच्छा विचार है। तर्क के लिए

शीघ्र:

चेक आप उत्पादन का परीक्षण या निवारण करने के लिए चाहते हैं, तो; अन्यथा, अनचेक छोड़ दें।

क्लिक करें ठीक

उपयोग कैसे करें:

  1. अपनी परियोजना संकलित करें!XSD.exe केवल संकलित कोड पर दिखता है।
  2. में कक्षा पर क्लिक करें समाधान एक्सप्लोरर
  3. क्लिक करें Tools, Create Schema From Class
  4. पर दिखाएँ समाधान एक्सप्लोरर में सभी फ़ाइलें बटन पर क्लिक करें।
  5. अपनी कक्षा के समान फ़ोल्डर में देखें और आप Schema0.xsd देखेंगे।
  6. Schema0.xsd पर राइट क्लिक करें और चुनें और Include In Project
  7. का नाम बदलें Schema0.xsd<the name of the class>.xsd-
  8. (वैकल्पिक) यदि आप इस स्कीमा का उपयोग कर एक्सएमएल संपादक में xml फ़ाइलें संपादित करना चाहते हैं आपको अपनी ओर से इस नए xsd संपादित करने पड़ सकते आप सभी विशेषताओं का उपयोग नहीं कर रहे हैं। Xml संपादक (जो चेतावनियां बनाते हैं) में नीली squiggly लाइनों से छुटकारा पाने के लिए use="required"के साथ प्रतिस्थापित कर सकते हैं, यदि वास्तव में इन विशेषताओं की आवश्यकता नहीं है।
+2

चरण 1 को संकुचित न करें **, उपयोग के दौरान, जैसा कि मैंने किया था।मुझे महसूस करने के लिए कुछ समय लगा: $ –

+1

@ आर। एसच्रेर्स, जोर दिया। धन्यवाद! – toddmo

+0

यह उत्तर बहुत अच्छा है। धन्यवाद। आपकी राय में कक्षा में लिखे गए टिप्पणियों को एक्सएसडी आउटपुट फ़ाइल में भी जोड़ना संभव है? – theLaw

संबंधित मुद्दे