2013-08-28 27 views
4

我們有一個Nuget軟件包,它已經在內部開發,並將許多與MVC相關的資源添加到任何將其拉入的項目中--文件夾中的Index.cshtml視圖,一個HomeControllerControllers文件夾和一個Content文件夾,其中包含一些靜態文件。在TFS中更新nuget軟件包時處理待執行的刪除操作

我們創建包的新版本,並將其拉入一個項目,是TFS源代碼控制之下時,都會包的當前版本是先卸載(標準的NuGet行爲)。這會導致所有資產被置於源代碼管理中的掛起刪除狀態。每當一個文件夾清空所有文件時,該文件夾也被置於掛起刪除狀態。

當安裝新版本的Nuget軟件包時,軟件包管理器會拋出錯誤,因爲它試圖複製的資產已經設置爲刪除,或者父文件夾設置爲在文件夾中刪除。

有沒有辦法,要麼靠TFS安裝新的包或不首先卸載時刪除它們時有效地救回資產來處理這種情況呢?

+0

我們也有類似的問題似乎與本地工作區和一定數量的文件從更新的軟件包,因爲我們的軟件包中只有一個包含兩個文件,並且它們被正確標記爲由我們的TFS「更改」。 那麼你也使用本地工作區?包裝中包含多少個文件? – Boris

+0

我也在使用本地工作區。包中有5個文件,1個控制器,1個視圖和3個其他資產。每個文件夾都沒有任何其他文件,因此卸載軟件包時,文件所在的文件夾會被標記爲暫掛刪除。如果作爲軟件包一部分的文件在安裝後發生了變化,Nuget似乎很聰明,可以忽略該文件(或者至少讓您選擇忽略它),並且不會刪除文件。這些文件在TFS中被標記爲已修改。 – levelnis

+0

所以我認爲你並沒有絆倒解決方案。這太遺憾了。 ;)我實際上採取將我的工作空間轉換回服務器工作空間,並且不再有這些問題。可能是一個實際的NuGet錯誤? (請參閱[本官方問題](http://nuget.codeplex.com/workitem/1690),儘管前段時間它已關閉)。 – Boris

回答

0

雖然有掛鉤和方式,其中你可以處理這個(掛接到IVsPackageInstallerEvents或管理它直通init/install/uninstall.ps1腳本,它可能是更容易使用NuGet包還原。

建議的做法是不籤「包」文件夾到您的源代碼管理,而不是使用NuGet包恢復在生成過程中恢復包更多信息here

+2

同意。我總是使用包恢復。這裏的問題不在於包文件夾的內容。它將特定文件安裝到目標項目中(不是二進制文件,而是實際代碼文件)。這些資產必須檢入到TFS中,因爲我們有部署構建,將Web項目文件安裝到目標服務器上,如果這些文件從TFS中排除,這些目標服務器將失敗。 – levelnis

+2

你有沒有找到這個問題的解決方案?我們與我們自己開發的NuGet包以及包依賴的非託管DLL存在相同的問題。 – realistschuckle

相關問題