57

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に渡すことです。

4

2 に答える 2

99

xsd.exe次のように、VisualStudioIDEに正常に統合できます。

に移動し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

使い方:

  1. プロジェクトをコンパイルしてください! XSD.exeコンパイルされたコードのみを調べます。
  2. ソリューションエクスプローラーでクラスをクリックします。
  3. クリックTools, Create Schema From Class
  4. ソリューションエクスプローラーShow All Filesのボタンをクリックします。
  5. クラスと同じフォルダを見ると、が表示されますSchema0.xsd
  6. 右クリックしSchema0.xsdて選択しますInclude In Project
  7. 名前を変更Schema0.xsdします<the name of the class>.xsd
  8. (オプション)xsdこのスキーマを使用してxmlエディターでxmlファイルを編集する必要があり、すべての属性を使用していない場合は、これを手動で編集する必要があります。実際にこれらの属性が必要ない場合は、に置き換えuse="required"use="optional"、xmlエディター(警告を作成する)の青い波線を取り除くことができます。
于 2014-10-26T17:24:09.730 に答える
36

使用できます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

于 2012-04-04T18:49:17.260 に答える