2013-03-08 46 views
1

我創建了一個基於我的c#dtos創建打印稿dto文件的t4模板。在這一代中,我也希望將生成的ts文件編譯爲js文件並將它們添加到解決方案中,就像web essentials爲我保存ts文件時所做的一樣。從t4模板編譯打字稿文件

我最初的想法是以某種方式觸發保存事件;

EnvDTE.DTE dte = (EnvDTE.DTE) ((IServiceProvider) this.Host).GetService(typeof(EnvDTE.DTE)); 
dte.OpenFile(EnvDTE.Constants.vsViewKindAny, outputFilePath); 

保存文件(觸發編譯),然後再關閉它。但我無法得到這個工作。

有沒有人有我的想法?

+0

好像它會是比較容易的方式,只是直接調用tsc.exe:

我用下面的代碼拉開序幕編譯器? – 2013-03-08 18:36:10

+0

你可能是對的,但是知道它是否可行還是有趣的。 – Julius 2013-03-08 19:01:45

+0

@Julius:你能解釋你是怎麼做的? – jgauffin 2013-05-20 18:56:56

回答

1

我最終按照Ryan Cavanaugh的建議,只是調用編譯器。我用Olegs tips for creating more than one output for a template將生成的文件添加到項目和tt模板中。

<#+ 
void CompileTypeScriptFile(string fullFileName) 
{ 
    var process = new System.Diagnostics.Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = "tsc.exe", 
      Arguments = "--target ES5 \"" + fullFileName + "\"" 

     } 
    }; 
    process.Start(); 
    process.WaitForExit(); 
} 
#> 
0

正確的做法是在T4模板之後運行一個單獨的構建目標(或任務)並編譯輸出。 T4似乎不適合這個。

+0

你能否詳細說明一下如何做到這一點?不想重新編譯項目中的所有ts文件(需要looooong) – Julius 2013-03-12 17:11:00

0

您可以使用T4Toolbox將您的T4文件與.ts文件關聯。它將「自定義工具模板」添加到Visual Studio屬性窗口中,並提供一個名爲T4Toolbox.TemplatedFileGenerator的自定義工具,該工具將在保存.ts文件時自動轉換模板。您可以使用T4Toolbox的output management功能將生成的.js文件添加到解決方案中的所需位置。