我的項目中有一些T4模板。每當我做出更改並保存tt文件時,它都會自動更新生成的文件。這是一個循環數據庫中所有表的模板,並生成大約100多個文件。因此,每當我保存我的模板時,visual studio會掛起幾秒鐘,這很煩人。有沒有辦法禁用「自動刷新」功能,我可以通過上下文菜單手動運行模板。如何在Visual Studio(2012)中禁用T4模板自動運行?
謝謝!
我的項目中有一些T4模板。每當我做出更改並保存tt文件時,它都會自動更新生成的文件。這是一個循環數據庫中所有表的模板,並生成大約100多個文件。因此,每當我保存我的模板時,visual studio會掛起幾秒鐘,這很煩人。有沒有辦法禁用「自動刷新」功能,我可以通過上下文菜單手動運行模板。如何在Visual Studio(2012)中禁用T4模板自動運行?
謝謝!
在編輯文件時,您可以在文件屬性的「自定義工具」下刪除TextTemplatingFileGenerator,然後在完成後將其放回。
感謝您的分享。這項工作肯定會奏效。想知道是否有更好的選擇。 – Calvin
我有一個類似的問題。我通過創建一個ttinclude文件(實際上這已經是一個包含我的模板的實用函數的標準包含文件)並將其包含在我所有的T4模板中,從而快速找到了解決方法。然後我只是在include文件中創建了一個編譯器錯誤。因此,當生成器試圖運行時,它只會在編譯時失敗。然後,當我準備好實際生成時,我擺脫了有問題的代碼,然後生成。
例如引起故障:
<#+
#
#>
要禁用失敗:
<#+
//#
#>
您還可以,如果你只是想禁用你的工作的一個用這一招在T4模板本身。
希望未來的VS版本將允許您簡單地禁用自動轉換。
由於TT總是執行(仍然),所以當TT執行時,我發現了一種不同的方式來控制輸出。
/********SET THIS TO REGENERATE THE FILE (OR NOT) ********/
var _RegenerateFile = true;
/********COS VS ALWAYS REGENERATES ON SAVE ***************/
// Also, T4VSHostProcess.exe may lock files.
// Kill it from task manager if you get "cannot copy file in use by another process"
var _CurrentFolder = new FileInfo(Host.ResolvePath(Host.TemplateFile)).DirectoryName;
var _AssemblyLoadFolder = Path.Combine(_CurrentFolder, "bin\\Debug");
Directory.SetCurrentDirectory(_CurrentFolder);
Debug.WriteLine($"Using working folder {_CurrentFolder}");
if (_RegenerateFile == false)
{
Debug.WriteLine($"Not Regenerating File");
var existingFileName = Path.ChangeExtension(Host.TemplateFile, "cs");
var fileContent = File.ReadAllText(existingFileName);
return fileContent;
}
Debug.WriteLine($"Regenerating File"); //put the rest of your usual template
另一種方法(我對最終結算)是基於讀取設置上是爲T4提供數據的類之一的屬性條件編譯符號。除非添加REGEN_CODE_FILES
條件編譯符號,否則這會帶來跳過所有準備工作(以及IDE滯後)的好處。 (我想這也可以做成一個新的解決方案的配置了。是的,這不工作,並刪除下面類變化的需要)
類我在同一組件調用的例子..
public class MetadataProvider
{
public bool RegenCodeFile { get; set; }
public MetadataProvider()
{
#if REGEN_CODE_FILES
RegenCodeFile = true; //try to get this to set the property
#endif
if (RegenCodeFile == false)
{
return;
}
//code that does some degree of preparation and c...
}
}
在TT文件...
var _MetaProvider = new MetadataProvider();
var _RegenerateFile = _MetaProvider.RegenCodeFile;
// T4VSHostProcess.exe may lock files.
// Kill it from task manager if you get "cannot copy file in use by another process"
var _CurrentFolder = new FileInfo(Host.ResolvePath(Host.TemplateFile)).DirectoryName;
var _AssemblyLoadFolder = Path.Combine(_CurrentFolder, "bin\\Debug");
Directory.SetCurrentDirectory(_CurrentFolder);
Debug.WriteLine($"Using working folder {_CurrentFolder}");
if (_RegenerateFile == false)
{
Debug.WriteLine($"Not Regenerating File");
var existingFileName = Path.ChangeExtension(Host.TemplateFile, "cs");
var fileContent = File.ReadAllText(existingFileName);
return fileContent;
}
Debug.WriteLine($"Regenerating File");
是的,我很驚訝, 「功能」 在Visual Studio。地獄,我很驚訝它仍然在visual studio 2013中。它使得在visual studio中開發t4模板幾乎是不可能的。 –