2012-02-15 18 views
2

xsltprocを実行してC#ソースファイルに変換するC#プロジェクトでビルド前のイベントが発生しました。生成されたソースは、通常の方法でビルドされます。つまり、XMLが変更されたかどうかにかかわらず、プロジェクトは常にビルドされます。XMLが変更された場合にのみ、XMLからC#クラスを生成

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

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

ご迷惑をおかけして申し訳ございません。

答えて

3

最後に、各XMLファイルへの参照を含む新しいItemGroupをcsprojファイルに追加しました。私は、各項目に前処理を行いの要素名を与えた:

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

その後プロジェクトファイルに私はBeforeBuildターゲットを上書きし、それは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が変更された場合にのみビルドされます。私はthisフォーラム投稿からアプローチを得ました。

関連する問題