web-dev-qa-db-ja.com

C#プロジェクトにXSDを含めるためのベストプラクティス

ユーザー入力XMLを検証するために、プログラムに含める必要があるXSDスキーマがあります。スキーマは定期的に更新する必要があります。 (プログラマーによる。)

これを含める私の現在の方法は、Resources.resx内への参照を保持することです。ただし、XSDとC#の間ですべての列挙型を複製する必要があるため、これは理想的ではないようです。

xsd.exeを使用してXSDファイルをランタイムクラスに変換する方法も確認しました。ただし、これを理解するには、Visual Studioの外部で別のプロセスを実行する必要があるため、更新がより複雑になり、プロセスが必要になります将来の作者のために詳細に説明します。

これが異常な状況であるとは想像できません-これを一般的に行う方法はありますか?現在の方法で重複を削除できますが、各更新でスキーマを手動で処理する必要はありませんか?

4
Chris

各ビルドの前にXSD.EXEを実行するビルド前のステップを作成します。

SOこれを自動化する方法を説明する他の2つの回答が見つかりました: https://stackoverflow.com/questions/14897750/automate-xsd-exe-during-build = https://stackoverflow.com/questions/2990684/automatically-generate-xsd-to-c-sharp-in-visual-studio-ide

2つ目は、codeplexにあるXSD2codeと呼ばれるツールを参照します。私はそれのためのnugetパッケージを見ません。

4
Moby Disk

答えは主に、スキーマの変更を強制するような方法で型が変更されると予想される頻度に依存します。

変更がほとんどまたはまったく発生しない場合、メンテナの観点から行う最も簡単なことは、静的XSDドキュメントの値を複製することです。

変更が頻繁に発生する場合は、ビルドアーティファクトとしてXSDを生成する方法を考えた方がよいでしょう。これにより、重複がなくなり、確実に最新の状態になりますが、それをまとめるのにかなりの先行費用がかかる場合があります。

2
Dan Lyons