簡體   English   中英

我應該將 Visual Studio .suo 和 .user 文件添加到源代碼管理嗎?

[英]Should I add the Visual Studio .suo and .user files to source control?

Visual Studio 解決方案包含兩種類型的隱藏用戶文件。 一種是解決方案.suo文件,它是一個二進制文件。 另一個是項目.user文件,它是一個文本文件。 這些文件究竟包含哪些數據?

我也一直想知道我是否應該將這些文件添加到源代碼管理中(在我的例子中是 Subversion)。 如果我不添加這些文件而另一個開發人員簽出解決方案,Visual Studio 會自動創建新的用戶文件嗎?

這些文件包含通常特定於您的機器的用戶首選項配置,因此最好不要將其放在 SCM 中。 此外,VS 幾乎每次執行時都會更改它,因此 SCM 將始終將其標記為“已更改”。 我也不包括,我在一個使用 VS 的項目中使用了 2 年,並且沒有任何問題。 唯一的小煩惱是調試參數(執行路徑、部署目標等)存儲在這些文件之一(不知道是哪個)中,所以如果你有一個標准,你將無法'通過 SCM 為其他開發人員發布'它,讓整個開發環境'准備好使用'。

你不需要添加這些——它們包含每個用戶的設置,其他開發人員不會想要你的副本。

其他人解釋了為什么將*.suo*.user文件置於源代碼管理之下並不是一個好主意。

我建議您將這些模式添加到svn:ignore屬性中,原因有兩個:

  1. 所以其他開發人員不會以一個開發人員的設置結束。
  2. 因此,當您查看狀態或提交文件時,這些文件不會使代碼庫變得混亂,也不會掩蓋您需要添加的新文件。

我們不提交二進制文件 (*.suo),但我們提交 .user 文件。 .user 文件包含例如用於調試項目的啟動選項。 您可以在“調試”選項卡的項目屬性中找到啟動選項。 我們在一些項目中使用了 NUnit,並配置了 nunit-gui.exe 作為項目的啟動選項。 如果沒有 .user 文件,每個團隊成員都必須單獨配置它。

希望這可以幫助。

由於我在 2011 年通過 Google 找到了這個問題/答案,我想我需要花點時間將 Visual Studio 2010 創建的 *.SDF 文件的鏈接添加到可能不應該添加到版本控制的文件列表中( IDE 將重新創建它們)。 由於我不確定 *.sdf 文件是否可以在其他地方合法使用,因此我只忽略了來自 SVN 的特定 [projectname].sdf 文件。

為什么 Visual Studio 轉換向導 2010 會創建海量 SDF 數據庫文件?

不,您不應該將它們添加到源代碼管理中,因為 - 正如您所說 - 它們是特定於用戶的。

SUO(解決方案用戶選項):記錄您可能與您的解決方案關聯的所有選項,以便每次打開它時都包含您所做的自定義。

.user 文件包含項目的用戶選項(而 SUO 用於解決方案)並擴展項目文件名(例如,anything.csproj.user 包含 any.csproj 項目的用戶設置)。

這似乎是微軟對此事的看法:

添加(和編輯).suo 文件到源代碼管理

不知道你的項目為什么把DebuggingWorkingDirectory 存儲在suo 文件中。 如果這是用戶特定的設置,您應該考慮將其存儲在 *.proj.user 文件名中。 如果該設置可在處理項目的所有用戶之間共享,則應考慮將其存儲在項目文件本身中。

甚至不要考慮將 suo 文件添加到源代碼管理中! SUO(解決方案用戶選項)文件旨在包含特定於用戶的設置,不應在使用同一解決方案的用戶之間共享。 如果您要在 scc 數據庫中添加 suo 文件,我不知道您會破壞 IDE 中的其他哪些內容,但是從源代碼控制的角度來看,您將破壞 web 項目 scc 集成,使用的 Lan vs Internet 插件由不同的用戶進行 VSS 訪問,您甚至可能導致 scc 完全中斷(存儲在 suo 文件中的 VSS 數據庫路徑可能對您有效,但對其他用戶可能無效)。

阿林·康斯坦丁 (MSFT)

默認情況下,Microsoft 的 Visual SourceSafe 不將這些文件包含在源代碼管理中,因為它們是特定於用戶的設置文件。 如果您使用 SVN 作為源代碼管理,我會遵循該模型。

Visual Studio 將自動創建它們。 我不建議將它們置於源代碼管理中。 有很多次本地開發人員的 SOU 文件導致 VS 在該開發人員框上表現不正常。 刪除文件然后讓 VS 重新創建它總是可以解決問題。

MSDN 網站上,它明確指出

解決方案用戶選項 (.suo) 文件包含每個用戶的解決方案選項。 此文件不應簽入源代碼控制

所以我會說在將內容簽入源代碼管理時忽略這些文件是非常安全的。

不。

我只是想要一個真正簡短的答案,但沒有。

我不會。 任何可以根據“用戶”更改的內容通常都不適用於源代碼控制。 .suo、.user、obj/bin 目錄

這些文件是用戶特定的選項,應該獨立於解決方案本身。 Visual Studio 將根據需要創建新的,因此不需要將它們簽入源代碼管理。 事實上,最好不要這樣做,因為這允許個人開發人員按照他們認為合適的方式自定義他們的環境。

它們包含有關項目的特定設置,這些設置通常分配給單個開發人員(例如,調試應用程序時的起始項目和起始頁面)。

所以最好不要將它們添加到版本控制中,讓 VS 重新創建它們,以便每個開發人員都可以擁有他們想要的特定設置。

您不能對 .user 文件進行源代碼控制,因為這是特定於用戶的。 它包含遠程機器的名稱和其他用戶相關的東西。 這是一個與vcproj相關的文件。

.suo 文件是一個與 sln 相關的文件,它包含“解決方案用戶選項”(啟動項目、窗口位置(停靠的位置、位置、浮動的位置)等)

這是一個二進制文件,我不知道它是否包含“用戶相關”的內容。

在我們公司,我們不會將這些文件置於源代碼控制之下。

.user 是用戶設置,我認為 .suo 是解決方案用戶選項。 您不希望這些文件受到源代碼控制; 它們將為每個用戶重新創建。

不要將任何這些文件添加到版本控制中。 這些文件是使用工作站特定信息自動生成的,如果簽入版本控制會導致其他工作站出現問題。

使用 Rational ClearCase的答案是否定的。 只有 .sln 和 .*proj 應該在源代碼控制中注冊。

我無法回答其他供應商。 如果我沒記錯的話,這些文件是“用戶”特定的選項,您的環境。

不,它們不應該致力於源代碼控制,因為它們是開發人員/機器特定的本地設置。

GitHub 在https://github.com/github/gitignore/blob/master/VisualStudio.gitignore上維護了一個建議文件類型列表,供 Visual Studio 用戶忽略

對於 svn,我設置了以下global-ignore屬性:

*.DotSettings.User
*.onetoc2
*.suo
.vs
預編譯網頁
大拇指數據庫
對象
垃圾桶
調試
*。用戶
*.vshost.*
*.tss
*.dbml.layout

其他人解釋說不,您不希望在版本控制中使用它。 您應該配置您的版本控制系統以忽略該文件(例如,通過.gitignore文件)。

要真正理解原因,查看此文件中的實際內容會有所幫助。 我編寫了一個命令行工具,可以讓您查看.suo文件的內容。

通過以下方式將其安裝在您的機器上:

dotnet tool install -g suo

它有兩個子命令, keysview

suo keys <path-to-suo-file>

這將轉儲文件中每個值的鍵。 例如(略):

nuget
ProjInfoEx
BookmarkState
DebuggerWatches
HiddenSlnFolders
ObjMgrContentsV8
UnloadedProjects
ClassViewContents
OutliningStateDir
ProjExplorerState
TaskListShortcuts
XmlPackageOptions
BackgroundLoadData
DebuggerExceptions
DebuggerFindSource
DebuggerFindSymbol
ILSpy-234190A6EE66
MRU Solution Files
UnloadedProjectsEx
ApplicationInsights
DebuggerBreakpoints
OutliningStateV1674
...

如您所見,許多 IDE 功能使用此文件來存儲它們的狀態。

使用view命令查看給定鍵的值。 例如:

$ suo view nuget --format=utf8 .suo
nuget

?{"WindowSettings":{"project:MyProject":{"SourceRepository":"nuget.org","ShowPreviewWindow":false,"ShowDeprecatedFrameworkWindow":true,"RemoveDependencies":false,"ForceRemove":false,"IncludePrerelease":false,"SelectedFilter":"UpdatesAvailable","DependencyBehavior":"Lowest","FileConflictAction":"PromptUser","OptionsExpanded":false,"SortPropertyName":"ProjectName","SortDirection":"Ascending"}}}

有關該工具的更多信息,請訪問: https : //github.com/drewnoakes/suo

如果您在ProjectProperties>Debugging>Environment 中設置可執行目錄依賴項,路徑將存儲在“.user”文件中。

假設我在上面提到的字段中設置了這個字符串: “PATH=C:\\xyz\\bin”這是它如何存儲在“.user”文件中:

<LocalDebuggerEnvironment>PATH=C:\\xyz\\bin$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>

這對我們在 OpenCV 中工作有很大幫助。 我們可以為不同的項目使用不同版本的 OpenCV。 另一個優勢是,在新機器上設置我們的項目非常容易。 我們只需要復制相應的依賴目錄。 所以對於某些項目,我更喜歡將“.user”添加到源代碼管理中。

盡管如此,它完全依賴於項目。 您可以根據需要接聽電話。

正如其他答案中所解釋的, .suo.user都不應該添加到源代碼管理中,因為它們是特定於用戶/機器的(順便說一句,最新版本的 VS 的.suo已移入專用臨時目錄.vs ,這應該是完全脫離源代碼控制)。

但是,如果您的應用程序需要一些環境設置以在 VS 中進行調試(此類設置通常保存在.user文件中),則准備一個示例文件(將其命名為.user.SAMPLE )並將其添加到源代碼控制中可能會很方便參考。

代替此類文件中的硬編碼絕對路徑,使用相對路徑或依賴環境變量是有意義的,因此示例可能足夠通用以易於其他人重用。

暫無
暫無

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

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