簡體   English   中英

為什么visual studio會在Azure DevOps簽入時排除BIN和OBJ文件夾

[英]Why does visual studio exclude BIN and OBJ folders at Azure DevOps checkin

我想知道在Visual Studio中使用Visual Studio或Git-Bash在Azure DevOps上簽入代碼的通用方法是什么。 發生的問題是bin文件夾包含許多第三方dll,它們在構建項目之前保留在源中。 投射這些第三方dll是必要的。 但是在登錄Azure DevOps后,bin和obj不存在。 這是由.gitignore和.gitattribute文件引起的。 我已經刪除了這兩個文件並檢查了bin文件夾。 這兩個文件的目的是什么。 有人可以建議一種解決方法。

排除

.gitignore旨在從源代碼管理中排除內容。 例如,如果您的文件中包含連接字符串到開發文件夾中的數據庫,則不希望將密碼簽入源代碼管理中。 將二進制文件簽入存儲庫是一種不好的做法。 您應該使用依賴關系管理系統(如Nuget,Chocolately,Maven,npm等)來指定依賴關系並下載它們。 您現在的方式就是將它們的多個副本簽入多個項目,而不是在一個地方管理它們。 正確的依賴關系管理可能是.gitignore的默認版本排除某些文件夾的原因。 您還想重新生成obj文件夾的所有內容。 如果你有舊版本,時間戳會變得奇怪。 每次干凈的構建意味着從沒有任何編譯工件的新副本開始。

.gitignore文件指定未跟蹤的文件。 .gitattributes定義每個路徑的屬性。 它們是Git的配置文件。

在Visual Studio中,bin和obj文件夾用於存儲編譯器生成的輸出(請參見此處 )。 由於這些輸出文件是由編譯器生成的,因此您不希望在源代碼管理中跟蹤它們。

如果您的項目需要引用某些第三方dll,最好的方法是將它們作為Nuget包引用,如果有可用於dll的Nuget包。 如果沒有,你可以將它們放在bin或obj以外的文件夾中,這樣就可以在Git中跟蹤它們。 您不應將.gitignore更改為跟蹤bin或obj文件夾。

要打開:即使您確實要檢查bin文件夾(並且,正如其他人提到的那樣,您沒有),請不要通過刪除.gitignore.gitattributes文件來執行此操作。

.gitignore包含了應該添加到您的庫文件的列表。 這些文件不應與團隊共享,如本地配置數據。 如果您在.vs目錄中提交SQLite數據,您將獲得無數沖突並且無法拉動,因為Visual Studio將鎖定該文件。

.gitattributes包含一組配置,尤其適用於行結尾。 這必須存在於存儲庫中,供所有開發人員就設置達成一致,否則您將遇到有關空白的沖突。

如果您確實必須(並且必須)檢查bin目錄中的文件,請恢復.gitignore.gitattributes 然后使用否定模式在.gitignore明確列出它們:

!bin/foo.dll

但是 - 正如其他人所評論的那樣 - 這仍然是一個壞主意。

因為大多數人已經提供了很好的答案。 我將為您提供有關如何處理第三方DLL(程序集)的一些想法

請記住,使用第三部分庫的理想/最佳方式是通過NuGet Feed / Packages

在某些情況下,這些DLL在Nuget.org中不可用。 在這種情況下,您可以按照以下步驟在項目中添加引用。

  1. 在項目中創建一個名為lib的文件夾

在此輸入圖像描述

  1. 在該文件夾中添加DLL

在此輸入圖像描述

  1. 右鍵單擊DLL->轉到Properties ,然后將BuildAction更改為NoneCopy to Output DirectoryDo not copy DLL

在此輸入圖像描述

  1. 最后,從lib文件夾添加引用

在此輸入圖像描述

因此,當您將項目檢入任何版本控件時,lib文件夾也將獲得簽入,在構建期間,引用也將從lib文件夾中獲取。

再次記住,不要使用bin / obj文件夾來引用你的DLL,也不要使用bin-obj文件夾。 因為這些文件夾將在構建期間自動生成。

bin文件夾定義為存儲第三方dll的錯誤位置。 將它們存儲在其他地方並在構建期間將它們復制到bin文件夾,或者如果可用則使用NuGet包。 這是一個廣泛使用的標准過程,用於將bin文件夾排除在檢查源控件之外。 此外,如果您決定清理您的解決方案,您的bin文件夾將被清空,您的第三方dll將會消失。

另一點,由於您使用azure-devops標簽發布問題,azure-devops提供了強大的構建和測試管道。 這意味着您可以檢入您的代碼和托管構建服務器(標准方案, 如果您按照這種方式設置)將從源代碼控制中提取代碼並執行構建,運行一些測試,如果一切正常,則壓縮您的二進制文件並放入他們在某個你可以下載它們的地方。 現在,您已經簽入的垃圾箱中的垃圾箱會發生什么? 當服務器構建代碼時,它們將被覆蓋。 那么為什么要先檢查它們呢? 如果服務器進行了清理(它不一定會這樣做),那么你的第三方dll將會丟失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM