7

Visual Studio でカスタム ツールを使用しているときに、あるファイルの内容を変更して、別のファイルのカスタム ツールをトリガーできるかどうかを調べようとしています。

私のシナリオはこれです:

Visual Studio C# プロジェクトには、他のいくつかの xsd ファイルを含む "master.xsd" xml スキーマがあります。Xsd2Code Visual Studio カスタム ツールを使用して、スキーマから .cs を生成しています。master.xsd 自体が変更された場合、これは正常に機能しますが、他の xsds の 1 つが変更された場合に、カスタム ツールをファイル master.xsd で実行したいと考えています。

あるファイルが別のカスタム ツールをトリガーする方法はありますか?

[編集 - カスタム ツールの使用を検討している理由の詳細]

現在、コマンド ラインから Xsd2Code を呼び出してスキーマからコード フィールドを生成する GenerateFiles.bat ファイルがあります (以下の MattDavey の提案に従って)。これは機能しますが、遅すぎます。

問題は、すべてのビルドで Xsd2Code が実行されることですが、他の多くのプロジェクトがこのプロジェクトとスキーマに依存しているため、おそらく何も変更されていないにもかかわらず、それらもすべて再コンパイルされます。実際の結論としては、単体テストの小さな変更でさえ、プロジェクトの半分が再コンパイルされるということです。これが、スキーマが変更された場合にのみコード ファイルを生成するカスタム ツール アプローチを検討してきた理由です。

4

1 に答える 1

4

私はこのように Xsd2Code をよく使用しますが、私のアプローチは、ビルド前に Xsd2Code コマンド ラインを呼び出し、ビルドごとに xml を再生成するイベントを追加することです。

私のビルド前イベントは次のようになります。

$(ProjectDir)BuildTools\Xsd2Code.exe $(ProjectDir)Api\Schemas\MySchema.xsd MyProject.Api.Schemas $(ProjectDir)Api\Schemas\MySchema.cs /platform Net40 /collection Array  /sc+ /ap+ /if- /xa+

あなたの場合、このビルド前のステップをマスター xsd (xsd:Imports は他のスキーマと推測しています) でのみ実行するか、各スキーマ ファイルでコマンドを個別に実行できます。

これの利点は、XSD スキーマを変更すると、非常に有用なコンパイル時エラーが発生することです:)

それがあなたにいくつかのアイデアを与えることを願っています!

編集

ビルド時間に関して強調した問題についてしばらく考え、ビルド前のスクリプトを次のように変更しました。

$(ProjectDir)BuildTools\Xsd2Code.exe $(ProjectDir)Api\Schemas\MySchema.xsd MyProject.Api.Schemas $(ProjectDir)Api\Schemas\MySchema.cs.temp /platform Net40 /collection Array  /sc+ /ap+ /if- /xa+

fc $(ProjectDir)Api\Schemas\MySchema.cs  $(ProjectDir)Api\Schemas\MySchema.cs.temp

if errorlevel 1 copy $(ProjectDir)Api\Schemas\MySchema.cs.temp $(ProjectDir)Api\Schemas\MySchema.cs /Y

del $(ProjectDir)Api\Schemas\MySchema.cs.temp

そのため、Xsd2Code はソース コードを一時ファイルに生成し、既存の .cs ファイルが異なる場合にのみ上書きします。これは、.xsd がまったく変更されていない場合、生成された .cs も変更されないことを意味するはずです:)

あなたはまだ xsd2code を実行するという打撃を受けていますが、生成されたソースが同じであった場合、プロジェクトのチェーン全体を再構築する msbuild の打撃を受けていません..

于 2012-02-17T09:47:43.730 に答える