共用方式為


方案總管(Solution Explorer)中的檔案巢狀

方案總管 會將相關檔案嵌套在一起,以協助整理這些檔案,並使其更易於查找。 例如,如果您將 Windows Forms 窗體新增至專案,表單的程式代碼檔案會巢狀於 方案總管中的表單下方。 在 .NET Core(和 .NET 5 和更新版本)專案中,可以進一步進行檔案巢狀處理。 您可以選擇檔案巢狀預設值 OffDefaultWeb。 您也可以 自定義檔案的巢狀 結構,或 建立解決方案專屬和專案特定的設定

備註

在 Visual Studio 2022 17.2 版和更早版本中,此功能僅支援 ASP.NET Core 專案。 在 17.3 版和更新版本中,以 .NET 為目標的所有專案都支援檔案巢狀。

檔案嵌套選項

開啟/關閉檔案巢狀的按鈕

非自訂檔案巢狀的可用選項如下:

  • 關閉:此選項提供平面檔案清單,沒有任何巢狀結構。

  • 預設值:此選項可讓您在 方案總管 中使用預設檔案巢狀行為。 如果指定的專案類型沒有任何設定存在,則專案中沒有檔案是巢狀的。 如果設定存在(例如,針對網頁專案),則會套用巢狀結構。

  • Web:此選項會將 Web 檔案巢狀行為套用至目前方案中的所有專案。 它有很多規則,我們鼓勵你檢查它,告訴我們你的想法。 下列螢幕快照著重展示您使用此選項時的檔案巢狀行為範例:

    方案總管中的檔案巢狀

自定義檔案巢狀

如果您不喜歡現成的配置,您可以建立自己的自訂檔案嵌套設定,以指示 解決方案總管 如何嵌套檔案。 您可以視需要新增多個自定義檔案巢狀設定,並視需要在它們之間切換。 若要建立新的自定義設定,您可以從空白檔案開始,或使用 Web 設定作為起點:

新增自定義檔案巢狀規則

建議您使用 Web 設定作為起點,因為使用已經運作的東西會比較容易。 如果您使用 Web 設定作為起點, .filenesting.json 檔案看起來會類似下列檔案:

使用現有的檔案巢狀規則作為自定義設定的基礎

讓我們將焦點放在節點 dependentFileProviders 及其子節點上。 每個子節點都是Visual Studio可用來巢狀檔案的規則類型。 例如, 具有相同的檔名,但不同的擴展名 是一種規則類型。 可用的規則如下:

  • extensionToExtension:使用這種類型的規則,在 file.ts 下巢狀 file.js

  • fileSuffixToExtension:使用這種類型的規則,將 file-vsdoc.js 巢狀於 file.js 之下。

  • addedExtension:使用這種類型的規則將 file.html.css 巢狀於 file.html 之下

  • pathSegment:使用此類型的規則,將 jquery.min.js 巢狀於 jquery.js 之下

  • allExtensions:使用此類規則將檔案。* 嵌套在file.js之下

  • fileToFile:使用此類型的規則,將bower.json巢狀於.bowerrc之下。

extensionToExtension 提供者

此提供者可讓您使用特定擴展名來定義檔案巢狀規則。 請考慮下列範例:

extentionToExtension 範例規則

extentionToExtension 範例效果

  • cart.js 嵌套在 cart.ts 下,因為第一個 extensionToExtension 規則

  • cart.js 不是嵌套於 cart.tsx 下,因為 .ts 位於 .tsx 之前,根據規則,而且只能有一個父節點。

  • light.css 巢狀於 light.sass 底下,因為第二個 extensionToExtension 規則

  • home.html 嵌套於 home.md 下,因為第三個 extensionToExtension 規則

fileSuffixToExtension 提供者

此提供者的運作方式就像 extensionToExtension 提供者一樣,唯一的差異在於規則會查看檔案的後綴,而不只是擴展名。 請考慮下列範例:

fileSuffixToExtension 範例規則

fileSuffixToExtension 範例效果

  • portal-vsdoc.js 因為 fileSuffixToExtension 規則而巢狀於 portal.js 底下

  • 規則的所有其他層面的運作方式都與 extensionToExtension 相同

addedExtension 提供者

此提供者將具備額外擴展名的檔案置於不帶額外擴展名的檔案底下。 其他擴展名只能出現在完整檔名的結尾。

請考慮下列範例:

addedExtension 範例規則

addedExtension 範例效果

  • 因為addedExtension 規則,file.html.css 巢狀於 file.html 底下

備註

您未指定 addedExtension 規則的任何擴展名;它會自動套用至所有擴展名。 也就是說,任何與另一個檔案同名且具有相同擴展名,並在末尾加上額外擴展名的檔案,會巢狀於另一個檔案底下。 您無法將此提供者的效果限製為僅特定擴展名。

pathSegment 提供服務者

此提供者會將具備副檔名的檔案巢狀在沒有副檔名的檔案下方。 其他擴展名只能出現在完整檔名的中間。

請考慮下列範例:

pathSegment 範例規則

pathSegment 範例效果

  • jquery.min.js 巢狀於 jquery.js 下,因為 pathSegment 規則

備註

  • 如果您未指定 pathSegment 規則的任何特定擴展名,則會套用至所有擴展名。 也就是說,與另一個檔案同名和擴展名的任何檔案,以及中間的額外擴展名會巢狀於另一個檔案底下。

  • 您可以透過以下方式指定 pathSegment 規則的效果,將其限制為特定的檔案副檔名:

    "pathSegment": {
        "add": {
          ".*": [
            ".js",
            ".css",
            ".html",
            ".htm"
          ]
        }
    }
    

allExtensions 服務提供者

此提供者可讓您針對任何擴展名但相同基底檔名的檔案定義檔案巢狀規則。 請考慮下列範例:

allExtensions 範例規則

allExtensions 範例效果

  • template.cstemplate.doc會因為allExtensions規則而巢狀於 template.tt 底下。

fileToFile 提供者

此提供者可讓您根據整個檔名來定義檔案巢狀規則。 請考慮下列範例:

fileToFile 範例規則

fileToFile 範例效果

  • .bowerrc 是嵌套在 bower.json 因為 fileToFile 規則

規則順序

排序在自定義配置檔的每個部分都很重要。 您可以在 dependentFileProvider 節點內將規則向上或向下移動,以變更執行規則的順序。 例如,如果您有一個規則會讓 file.jsfile.ts 的父代,而另一個規則會讓 file.coffee 成為file.ts的父代,則檔案中顯示的順序會決定這三個檔案存在時的巢狀行為。 由於file.ts只能有一個父代,因此以最先執行的規則為準。

排序對於規則區段本身也很重要,而不只是針對區段內的檔案。 一旦一對檔案與檔案巢狀規則相符,檔案中列於後面的其他規則將被忽略,然後處理下一組檔案。

檔案嵌套按鈕

您可以透過 [方案總管] 中的相同按鈕來管理所有設定,包括您自己的自訂設定:

啟用自定義檔案巢狀規則

建立專案特定設定

您可以透過每個解決方案和專案的右鍵選單(內容選單)來建立特定於解決方案的設定和特定於專案的設定。

解決方案和專案特定的巢狀規則

解決方案特定和專案特定的設定會與使用中的Visual Studio設定結合。 例如,您可能有空白的專案特定配置檔案,但 方案總管 仍會巢狀排列檔案。 巢狀行為來自解決方案特定的設定或 Visual Studio 設定。 合併檔案巢狀設定的優先順序是:Visual Studio > 方案 > 專案。

您可以藉由將節點設定為 true,告訴 Visual Studio 使用解決方案特定或專案特定的設定。 Visual Studio 會停止在該層級合併檔案,而且不會將它與較高階層的檔案合併。

解決方案特定和專案特定的設定可以提交至版本控制系統,整個在程式碼庫上工作的團隊都可以共用這些設定。

停用專案的檔案巢狀規則

您可以使用「供應者」的移除動作來停用特定解決方案或專案的現有全域檔案巢狀規則,而不是採用新增操作。 例如,如果您將下列設定程式代碼新增至專案,則會停用此特定專案可能全域存在的所有 pathSegment 規則:

"dependentFileProviders": {
  "remove": {
    "pathSegment": {}
  }
}