MSBuild 是 .NET 開發體驗的基本組成部分,但它對新手和有經驗的開發人員都具有挑戰性。為了幫助開發人員更好地理解他們的專案檔案,並訪問需要直接編輯專案檔案的高階功能,我們釋出了一個實驗性的 MSBuild 編輯器,它對 MSBuild 檔案的理解比當前 XML schema 所允許的要豐富得多。根據反饋,我們希望所有 .NET 開發人員都可以預設使用它。如果您使用 MSBuild 檔案工作,請嘗試一下,讓我們知道它是如何工作的。
適合哪些使用者使用?
儘管 Visual Studio 為管理專案及其設定提供了豐富的 UI,但您可能需要直接編輯 csproj 檔案以訪問 UI 中未公開的某些高階特性。在從原始碼控制合併更改時,您可能還需要直接編輯 csproj 檔案,或者您可能正在編寫 targets 和 props 檔案以供本地使用或在 NuGet 包中釋出。如果這些場景中的任何一個適用於您,那麼我們希望您體驗下新功能。
瞭解您的專案檔案
新的 MSBuild 編輯器不僅為 MSBuild 檔案中的 XML 元素提供了快速資訊,還為 MSBuild 表示式中的屬性、項和後設資料提供了快速資訊。快速資訊彈出視窗更豐富,有指向相關文件的深層連結,以及指向其他檔案引用的超連結,這些超連結可以幫助您瞭解底層如何使用該屬性或項。
如果您想了解如何使用屬性或項,可以使用 Ctrl-Click 或 Go to Definition 命令轉到定義它的位置。你也可以使用 Find References 命令在所有匯入的檔案中執行精確的搜尋:
不離開編輯器編寫程式碼
即使作為一名經驗豐富的 MSBuild 作者,我也經常開啟文件來查詢 MSBuild 屬性、項和後設資料的確切名稱和允許值。當我使用 MSBuild 編輯器時,我很少這樣做,因為它幾乎在檔案的任何地方都提供智慧感知,並根據它的 schema 提供文件:
它對 NuGet 包有特殊的支援,允許你搜尋包的 ID,並檢視包的描述和連結到它的 NuGet.org 頁面:
其他型別也有特殊處理,例如語言文化:
在 MSBuild 表示式中也支援智慧感知,包括屬性函式和項函式:
編輯器並不侷限於在其 schema 中定義的那些屬性和項。它掃描所有匯入的 MSBuild 檔案,併為在這些檔案中找到的任何屬性、項、後設資料和目標提供“推斷完成”。更棒的是,工具提示有一個超連結,指向屬性或項的應用場景:
及早發現問題
MSBuild 編輯器的驗證不僅僅是 XML 驗證。它將型別系統覆蓋到 MSBuild 上,因此您將獲得關於 URL 或版本字串等的格式錯誤。它對 MSBuild 表示式格式的理解意味著您無需執行構建就可以捕獲格式不正確的條件和表示式。
甚至還有一些 Roslyn 風格的分析器和程式碼修復。
增強 MSBuild 編輯體驗
MSBuild 編輯器由一種新的 MSBuild 特定的基於 json 的 schema 格式提供支援,該格式允許為 MSBuild 屬性、項、項後設資料和 targets 定義文件和型別註釋。它包括 .NET SDK 和其他常用 targets 和 SDK 的內建schema。
但是,您也可以為自己的 MSBuild targets 編寫 schema,以允許 MSBuild 編輯器在編輯或使用它們時提供更豐富的體驗。如果您是包含 build targets 的 NuGet 包的作者,那麼您可以在 NuGet 包中釋出該 sidecar schema,以便為包的使用者提供更好的 MSBuild 編輯體驗。
Q&A
Q:擴充套件有一個 GitHub 倉庫-我可以從原始碼構建和貢獻嗎?
A:絕對!只需克隆倉庫及其子模組,在 Visual Studio 中開啟,然後按 F5。
Q:為什麼擴充套件倉庫、名稱空間和程式集的名字中有“MonoDevelop”?
A:MSBuild 編輯器是我最初在2015年3月為 MonoDevelop IDE 建立的擴充套件的後代。儘管它在過去幾年裡發展了很多,包括移植到 Visual Studio,但出於懷舊的考慮,我保留了內部名稱。
Q:我可以在 Visual Studio Code 中使用擴充套件嗎?
A:還不行!我目前正在移植擴充套件到 LSP(語言伺服器協議,Language Server Protocol),所以它可以在 Visual Studio Code 擴充套件中使用。雖然 LSP 是新擴充套件的明顯選擇,但這個程式碼庫可以追溯到 Visual Studio Code 釋出之前。
我們渴望您的反饋!
如果您想嘗試下,你可以透過在 Visual Studio 擴充套件管理中搜尋“MSBuild Editor”找到它,或者從 Visual Studio Marketplace 下載它。該擴充套件目前僅適用於 Visual Studio,但將其移植到 Visual Studio Code 的工作正在進行中。
如果您遇到任何此擴充套件的任何問題,請釋出其到 GitHub 問題頁面。擴充套件是開源的,歡迎貢獻。請填寫這份調查問卷,讓我們瞭解您的經歷。我們感謝您的反饋,它將有助於指導實驗如何發展,以及 MSBuild 編輯器是否會成為 .NET 開發體驗的官方支援部分。
原文連結:https://devblogs.microsoft.com/visualstudio/experimental-msbuild-editor/