2

xsltproc を実行して一部の XML を C# ソース ファイルに変換する C# プロジェクトのビルド前イベントがあります。生成されたソースは、通常の方法でビルドされます。これは、XML が変更されたかどうかに関係なく、プロジェクトが常にビルドされることを意味します。

XML が変更された場合にのみ C# クラスを生成する方法はありますか? ビルド前のイベントは間違ったアプローチですか? XML を C# に変換する何らかのカスタム ツールを使用した方がよいでしょうか?

私は Visual Studio 2010 を使用しています。XML にはシリアル化されたオブジェクトが含まれていません。

どんな助けでも大歓迎です。

4

1 に答える 1

3

最後に、各 XML ファイルへの参照を含む新しい ItemGroup を csproj ファイルに追加しました。各項目に Preprocess という要素名を付けました。

<ItemGroup>
  <Preprocess Include="Xml\MySourceXmlFile1" />
  <Preprocess Include="Xml\MySourceXmlFile2.xml" />
</ItemGroup>

プロジェクト ファイルの後半で、BeforeBuild ターゲットをオーバーライドして、すべての Preprocess アイテムを XML ファイルと同じ名前の C# ソース ファイルに変換します。

<Target Name="BeforeBuild"
  Inputs="@(Preprocess)"
  Outputs="@(Preprocess->'$(ProjectDir)%(Filename).cs')">
  <Exec Command="xsltproc -o %22$(ProjectDir)%(Filename).cs%22 %22MyTransform.xsl%22 @(Preprocess)" />
</Target>

xsltproc への引数は %22 でエスケープする必要があることに注意してください。

C# ソース ファイルは、XML が変更された場合にのみビルドされるようになりました。このフォーラムの投稿からアプローチを得ました。

于 2012-02-22T10:32:07.227 に答える