2012-02-15 69 views
2

我在運行xsltproc以將某些XML轉換爲C#源文件的C#項目上有一個預生成事件。然後生成的源以正常方式構建。這意味着無論XML是否發生了變化,該項目都會被構建。只有在XML已經改變的情況下才從XML生成C#類

如果XML已經改變,是否有隻生成C#類的方法?預構建事件是否是錯誤的方法?使用某種自定義工具將XML轉換爲C#會更好嗎?

我正在使用Visual Studio 2010. XML不包含序列化對象。

任何幫助非常感謝。

回答

3

最後,我添加了一個新的ItemGroup到我的csproj文件中,並引用了每個XML文件。我給每個項目預處理的元素名稱:

<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論壇帖子得到了方法。

相關問題