2017-07-15 45 views
0

我遇到了一個超級煩人的場景,我希望別人之前經歷過這個,也許有一個解決方案或更好的過程來遵循,以避免這種情況。使用EF6實體安裝NuGet包,同時運行TFS導致寫入錯誤

我有一個自定義的Nuget包使用EF6,顯然有實體相關的文件。安裝時,它將這些實體從項目的根目錄加載到「實體」文件夾中。

我也在使用TFS,這會導致我所有這些麻煩。

當我去升級包時,它首先嚐試通過刪除現有實體文件夾來清除所有內容,以便我可以從新版本的NuGet內容中重新加載新的實體。這會導致文件夾進入TFS的結帳狀態。當NuGet嘗試加載新實體時,它會抱怨:

嘗試對1項目執行添加操作時遇到1錯誤。項目$/*******不能更改。此項目的父項具有待定刪除,必須先進行檢入。

這是超級討厭。基本上,我必須遵循這個過程,以避免它首先刪除軟件包安裝的所有實體文件,檢查刪除並在程序包上運行更新,然後重新加載所有實體文件。

有沒有人有更好的解決方案來處理源代碼控制下的Nugets?

TIA

回答

0

有沒有人有一個更好的解決方案用那樣 源控制下Nugets工作?

這是一個與TFS相關的已知問題,但沒有最終解決方案。有關詳細信息,請參閱Issue 4037

我認爲TFS客戶端邏輯是問題。它應該被改變,以便任何孩子添加或編輯一個掛起的父刪除導致父刪除被撤消,但該父母的所有其他孩子切換到單個刪除(即從全局父刪除更改爲通配符子刪除除外文件夾刪除後修改的文件)。

嘗試了許多不同的方法後,我發現了一個變通方法問題:

盒裝所有的DLL在一個單獨的NuGet包沒有任何內容。將任何其他文件打包到單獨的軟件包中。合適地標記兩個軟件包,以便用戶可以輕鬆地找到這兩個軟件包並相互關聯。

您也可以在Dll包中爲Content包創建一個依賴項(如果您願意),以便安裝Dll包會自動觸發安裝內容包。