2009-10-28 37 views
5

我從單個XML文件中生成了相當多的代碼,但模板組織在兩個不同的T4模板中。每當我更改XML文件時,我都必須記住打開兩個文件,將它們改爲平凡(添加/刪除空格)並再次保存以確保生成代碼。如何在XML文件更改時強制Visual Studio 2008從T4模板重新生成代碼?

這不可能是正確的做法!

理想情況下,如果XML文件已更改,我希望Visual Studio 2008在T4文件上進行文本轉換。我有點失落,因爲我真的不知道Visual Studio如何構建C#項目,所以在這個方向上的指針也會有所幫助(然後我可以嘗試自己弄清楚)。

+0

順便說一句:我想出了熱Visual Studio構建C#項目:MSBuild。項目文件本身(* .csproj)是一個MSBuild文件,類似於Makefile。因此,一個解決方案可能是在「構建」XML文件時觸摸* .tt文件...我會保持發佈。 – 2010-01-22 08:09:11

回答

2

您可以使用T4Toolbox的T4ScriptFileGenerator作爲XML文件的自定義工具。假設您使用此自定義工具在您的項目中包含Test.XML文件。 Test.XML第一次被保存時,這個自定義工具創建一個新的Test.tt文件。你可以在那裏放置你的代碼生成邏輯(就地,或#include你的其他.tt文件)。下次保存Test.XML時,它會轉換(生成代碼)現有的Test.tt.

2

我想我可能終於在這裏找到了解決方案。當瀏覽如何在項目文件中提到XAML文件用於c#項目時,我意識到了這一點。

讓我們假設一個使用C.xml數據的文件A.ttB.tt,並且我們希望在C.xml更改時重新生成代碼。

編輯項目文件。您的A.ttB.tt定義應該是這個樣子:

<ItemGroup> 
    <None Include="A.tt"> 
     <Generator>TextTemplatingFileGenerator</Generator> 
     <LastGenOutput>A.cs</LastGenOutput> 
     <DependentUpon>C.xml</DependentUpon> 
    </None> 
    <None Include="B.tt"> 
     <Generator>TextTemplatingFileGenerator</Generator> 
     <LastGenOutput>B.cs</LastGenOutput> 
     <DependentUpon>C.xml</DependentUpon> 
    </None> 
</ItemGroup> 

此外,您將需要(當然...)

<ItemGroup> 
    <None Include="C.xml" /> 
</ItemGroup> 

而且還指令自動生成A.csB.cs

<Compile Include="A.cs"> 
     <DependentUpon>A.tt</DependentUpon> 
     <AutoGen>True</AutoGen> 
     <DesignTime>True</DesignTime> 
</Compile> 
<Compile Include="B.cs"> 
     <DependentUpon>B.tt</DependentUpon> 
     <AutoGen>True</AutoGen> 
     <DesignTime>True</DesignTime> 
</Compile> 

我相信當你創建模板文件時,大部分的工作都已經完成了,所以你真的必須做廣告d是<DependentUpon>C.xml</DependentUpon>部件到ItemGroupA.ttB.tt

+1

如果這是正確的,這將會很有意義。可悲的是它不:( - DependentUpon顯然是隻用於在項目樹視圖呈現的目的 – Ibmurai 2015-01-13 14:01:38

+0

@Ibmurai,是的,我發現太...我只是沒有任何確實的證據,只是移動了,謝謝。爲了指出這個! – 2015-01-27 15:59:44

+0

我不認爲這是有效的。 – Slion 2017-06-21 17:20:25

相關問題