彩票走势图

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

原创|其它|编辑:陈津勇|2019-08-12 13:58:27.950|阅读 242 次

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

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

在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


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP