2010-07-05 58 views
6

我正在使用T4模板在我正在處理的項目中生成一些.config文件。從源代碼管理中排除嵌套項目

我已經設置了一個預生成任務來查找解決方案目錄中的所有.tt文件,然後執行TextTransform命令行工具,以便在每個生成中新生成代碼。

但是,我現在有「訪問被拒絕」的錯誤,因爲(例如)當它試圖在Web.UAT.tt文件上執行TextTransform時,Web.UAT.Config文件在TFS的源代碼控制下,從而寫保護。

通常我會在Visual Studio中選擇.Config文件,然後執行文件 - >源代碼控制 - >排除源代碼控制。不幸的是,對於任何顯示爲「嵌套」在另一個文件下的文件,這不會顯示爲一個選項!

即我可以排除web.tt,但不是web.config ...我可以排除default.aspx但不是default.aspx.cs。

有沒有人有任何關於如何從源代碼管理中排除低級別嵌套文件的想法,但保持頂級?

謝謝!

+0

您使用哪個源代碼管理提供程序? SourceSafe的?團隊基金會?還有別的嗎? – 2010-07-06 08:30:14

+0

TFS ...我將編輯問題更清楚。 – NeilD 2010-07-06 08:45:32

回答

2

我假設你在這裏使用TFS。

您無法完美地完成此任務 - 因爲Visual Studio會自動將添加到項目中的任何新項目添加到源代碼管理。您最好的解決方案是在運行模板之前查看使用MSBuild並簽發輸出文件的簽出(但之後您可能需要再次簽入)。快速瀏覽一下http://msbuildextensionpack.codeplex.com/,我已經提到過這樣做的目的。

失敗了,還有另一種方法。

  • 從源代碼控制中刪除輸出.config文件並簽入(最好使用源代碼管理資源管理器)。
  • 從VS內手動運行.tt,它會再次添加文件 - 它現在應該在其旁邊有一個加號。
  • 再次在源代碼管理資源管理器中,右鍵單擊此「新」文件並選擇「撤消掛起的更改」。您現在將文件保存在磁盤上,但不在源代碼管理中。
  • 現在TT可以運行,該文件是項目的一部分(因此將被髮布或其他),但它不受源代碼控制。

這個問題將會是別人第一次加載項目,他們的Visual Studio將自動創建輸出文件,如果他們運行.TT - 在這種情況下,他們可能需要重複此過程(從步驟2開始),或者需要手動創建一個正確名稱的存根(.config)文件(我甚至在加載項目之前建議),以便項目看到它並且不嘗試重新控制它。

+0

謝謝安德拉斯。我已經使用了第二條建議的修改版本來解決問題。 – NeilD 2010-07-06 09:22:25

2

好的...我用了安德拉斯佐爾坦的答案的改編版本。

基本上,我落得這樣做如下:

  1. 單擊在Visual Studio中.TT文件,並更改屬性中的「自定義工具」行是空白。這將從解決方案中刪除.config文件。
  2. 向解決方案中添加一個新的空白項目,稱爲.tt的輸出文件將是什麼(如此,Web.UAT.tt - > Web.UAT.config)。
  3. 選擇新添加的文件,並將其從源代碼管理中正常排除(文件 - >源代碼管理 - >排除)。

現在,當您構建時,您應該看到解決方案中新生成的文件,但沒有任何簽入或簽出。

這種方法有兩個缺點。首先,您必須爲項目中的每個.tt文件執行此操作,並確保其他任何開發人員都這樣做。其次,就是你現在只能通過來生成的輸出文件!

我認爲長期的,我可能會採取安德拉斯的建議,並寫一些MSBuild腳本檢出和檢查輸出文件,或至少刪除「只讀」標誌使用< Attrib>。

謝謝!

+0

其他人能看到更好的方式嗎?我錯過了哪些陷阱? – NeilD 2010-07-06 09:21:42

+0

一個狡猾的解決方案。然而,我遇到的問題是除了名稱之外,兩個文件之間不再有明確的聯繫;有些不熟悉TT技術的人可能會簡單地編輯.config文件,然後想知道爲什麼他們的編輯沒有完成。同樣,熟悉TT的人也會想知道爲什麼這個層次結構不存在(並且可能會認爲該項目已經失效!)。 的確,我的第二個解決方案還需要與團隊的其他成員進行一些溝通;但一旦加載一切看起來很正常。 我猜如果它有效,那就去吧。 – 2010-07-06 10:19:05

相關問題