注意!异步加载的.NET项目可能会影响Visual Studio扩展

在Visual Studio 2019版本16.3中,CSProj项目系统(C#/ VB非SDK样式)引入了一种称为部分加载模式(PLM)的新加载方式。解决方案加载后,项目系统在后台进行设计时构建,使UI保持响应和交互。扩展可能需要针对此行为更改进行调整。

在Visual Studio 2019版本16.3中,CSProj项目系统(C#/VB非SDK样式格)引入了一种新的加载方式——部分加载模式(PLM)。在解决方案加载之后,项目系统在后台进行设计时构建,让UI具有响应性和交互性。然而,就运行设计时构建所需的时间而言,某些功能可能不像过去那样工作了。详情请往下看。

PLM-IntelliSense.png

今天,CSProj项目阻塞UI线程,并在启动项目加载事件之前等待设计时构建和Roslyn初始化。为了进一步减少解决方案加载时间,CSProj现在将在评估之后立即触发项目加载事件,因为这足以在解决方案资源管理器中显示项目树并向Roslyn提供项目和源代码文件。

设计时构建将在后台线程上进行。这意味着智能感知、代码导航和设计器将在解决方案加载之后处于部分加载模式,直到设计时构建结果就绪。除了更快的加载解决方案,大多数用户甚至不会注意到这一点。

PLM-progress.png

这将与自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 正版授权的朋友,点这里。

1565166511625_12201A8E-ADC2-4723-A4C7-A25BEBC0575B(1).png

标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年7月9日
下一篇 2019年7月9日

相关推荐

发表回复

登录后才能评论