2011-05-13 27 views
4

我正在構建一個NuGet包,它將一些T4模板傳送到CodeTemplates目錄中。當我安裝NuGet軟件包時,T4模板都將「自定義工具」屬性設置爲「TextTemplatingFileGenerator」。這是不對的。NuGet - T4安裝後文件屬性不同

我知道我可以通過改變我的註冊表來禁用這個功能,以便不用這種方式添加新的T4模板,但是由於這是一個NuGet軟件包,這不是一個選項。

我已經看過PowerShell,但是我很難理解我將如何實現我的目標。

我已經看過了的.csproj文件的XML,發現這個:

<None Include="CodeTemplates\AddController\Controller.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
    <LastGenOutput>Controller.cs</LastGenOutput> 
</None> 

如果我從這個節點刪除「TextTemplatingFileGenerator」,那麼該文件將工作,我的願望。

我應該從哪裏出發?

回答

4

我不確定有一個很好的方法來做到這一點。在博客中,David Ebbo wrote

一個我會提到這個 模型最後一件事是,.TT文件通常 不是你的項目的一部分。相反,它 住在其他地方,只有它的 輸出成爲您的項目的一部分。 那麼,在技術上,該.TT文件可以在你的項目中,以方便編輯 ,但 那麼你必須刪除 「TextTemplatingFileGenerator」定製 工具,因爲你真的不希望它 對自己的執行(它肯定會自定義主機 失敗)。

這聽起來像是Visual Studio在將.tt文件添加到項目時的行爲。

這就是說,Scott Hanselman's AddMvc3ToWebForms使得在的csproj文件中的一些變化的GUID添加MVC功能(添加控制器/添加視圖等),因此有可能,你可以做一些類似他的代碼的東西,刪除的Generator節你的包中的文件並重新加載項目?

+0

這聽起來像你對問題的一些知識,但是這並不能真正解決我的問題。我絕對希望將T4模板作爲項目的一部分。這是我知道重寫MVC中的默認視圖和控制器模板的唯一方法。另外我還有一些其他的模板,我想住在項目中。 – 2011-05-16 14:03:45

+0

我不認爲有一種很好的方式來做你想做的事情,在VS添加後自動化VS來改變類型。 AddMvc3ToWebForms包處理項目文件以更改GUID - 也許您可以做類似的操作,以針對添加的每個文件更改自定義工具? – 2011-05-16 14:20:11

+0

是的,那可能是我會做的。我希望有人可以幫助。 – 2011-05-16 15:24:05

2

我有同樣的問題,我使用「install.ps1」來解決它,每次安裝或更新nuget包時都會執行它。

你install.ps1應該是這樣的:

param($installPath, $toolsPath, $package, $project) 

$addControllerFolder = $project.ProjectItems.Item("CodeTemplates").ProjectItems.Item("AddController") 

$addControllerFolder.ProjectItems.Item("Controller.tt").Properties.Item("CustomTool").Value = "" 
+1

我沒有試過這個,因爲我現在還沒有處理這個問題多年,但我很高興有人跟進了一些可能有用的東西。這是一個令人沮喪的問題。 – 2017-01-17 22:17:39