原創|其它|編輯:陳津勇|2019-08-12 13:58:27.950|閱讀 287 次
概述:在Visual Studio 2019版本16.3中,CSProj項目系統(C#/ VB非SDK樣式)引入了一種稱為部分加載模式(PLM)的新加載方式。解決方案加載后,項目系統在后臺進行設計時構建,使UI保持響應和交互。擴展可能需要針對此行為更改進行調整。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
在Visual Studio 2019版本16.3中,CSProj項目系統(C#/VB非SDK樣式格)引入了一種新的加載方式——部分加載模式(PLM)。在解決方案加載之后,項目系統在后臺進行設計時構建,讓UI具有響應性和交互性。然而,就運行設計時構建所需的時間而言,某些功能可能不像過去那樣工作了。詳情請往下看。
今天,CSProj項目阻塞UI線程,并在啟動項目加載事件之前等待設計時構建和Roslyn初始化。為了進一步減少解決方案加載時間,CSProj現在將在評估之后立即觸發項目加載事件,因為這足以在解決方案資源管理器中顯示項目樹并向Roslyn提供項目和源代碼文件。
設計時構建將在后臺線程上進行。這意味著智能感知、代碼導航和設計器將在解決方案加載之后處于部分加載模式,直到設計時構建結果就緒。除了更快的加載解決方案,大多數用戶甚至不會注意到這一點。
這將與自Visual Studio 2017以來具有此功能的.NET SDK樣式項目的當前行為相匹配。現在,CSProj和SDK樣式項目之間的體驗是一致的。
突破傳統
調用Roslyn API(例如Workspace.CurrentSolution或ProjectItem.FileCodeModel)可能會在PLM中返回不完整的代碼模型,因為Roslyn尚不知道項目引用。如果在解決方案加載后不久調用Roslyn API,您可能必須更新擴展。
方法如下:
var operationProgressStatusService = await this.GetServiceAsync(typeof(SVsOperationProgressStatusService)) as IVsOperationProgressStatusService; var stageStatus = operationProgressStatusService.GetStageStatus(CommonOperationProgressStageIds.Intellisense); await stageStatus.WaitForCompletionAsync();
當IntelliSense正在進行時,編輯所有者應該明確決定是否延遲文檔的初始化。
要選擇停用延遲文檔創建,請在.pkgdef文件中設置以下內容:
[$RootKey$\Editors\] "DeferUntilIntellisenseIsReady"=dword:00000000
要選擇延遲文檔創建(這是當前默認行為以避免違反與Roslyn數據的擴展的兼容性),請在.pkgdef文件中設置以下內容:
[$RootKey$\Editors\] "DeferUntilIntellisenseIsReady"=dword:00000001
這一變化將SDK樣式項目當前使用的功能帶入基于CSProj的項目。因此,除非這兩個項目系統的代碼路徑不同,否則它不太可能導致大多數擴展的問題。因此,我們認為這對擴展生態系統的影響很小,但它可能對單個擴展產生很大的影響。
要查看此更改是否會影響您的擴展,請立即下載Visual Studio 2019 v16.3預覽版1。
然后將包含以下代碼的.json文件放入%LocalAppData%\ Microsoft \ VisualStudio \ RemoteSettings \ LocalTest \ PersistentActions
{ "ActionPath": "vs\\core\\remotesettings", "ActionJson": { "FeatureFlags": { "CPS.UseOperationProgress": 0, "CSProj.PartialLoadMode": 1, "Designer.PartialLoadMode": 1, "Completion.PartialLoadMode": 1, "Roslyn.PartialLoadMode": 1 } }, "TriggerJson": null, "MaxWaitTimeSpan": "14.00:00:00", "Categories": [ ] }
然后重啟Visual Studio兩次(沒有錯,就是兩次!),這將為基于CSProj的項目啟用PLM。
要還原功能標志更改——刪除.json文件并重新啟動Visual Studio兩次。禁用PLM只是Visual Studio 2019 v16.3初始預覽中的一個選項。該選項將在以后的更新中刪除。
想要了解 Visual Studio 更多資源的朋友,請點這里。
想要獲取 Visual Studio 正版授權的朋友,請
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn