XSDファイルに苦労しています。
クラスから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
{
// ...
}
Configuration内に抽象クラスがあることに注意してください。その機能を使用すると、XSDを作成できますか?
アイデアは、クラスConfigurationをXSDに渡すことです。
XSD.exe
を使用できます(Visual Studioのインストールから利用可能です。)
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
_xsd.exe
_をVisual Studioに正常に統合することができますIDEこのように:
_Tools, External Tools
_に移動して、 Add ボタン:
2010
2015/2017
タイトル:
クラスからスキーマを作成
コマンド(フレームワークごと):
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)
出力ウィンドウを使用:
追加のコマンドウィンドウがポップアップするのを防ぎ、出力をクリアするまで出力の記録を保持します。おそらく良い考えです。
引数のプロンプト:
出力のテストまたはトラブルシューティングを行うかどうかを確認します。それ以外の場合は、未チェックのままにします。
クリック OK
使用方法:
XSD.exe
_はコンパイルされたコードのみを調べます。Tools, Create Schema From Class
_をクリックしますSchema0.xsd
_が表示されます。Schema0.xsd
_を右クリックして、_Include In Project
_を選択しますSchema0.xsd
_の名前を_<the name of the class>.xsd
_に変更しますxsd
を手動で編集する必要があります。これらの属性が実際に必要でない場合は、_use="required"
_を_use="optional"
_で置き換えて、xmlエディター(警告を作成する)の青い波線を削除できます。