上周初,我们发布了
Visual Studio 2019 v.16.1预览版1 (请参阅
发行说明 )。 这是第一个Visual Studio 2019更新的第一个预览。如果尚未配置为接收预览版本,请
立即进行 。 预览版安装在发行版旁边没有问题,因此它们不会互相干扰。 我强烈建议所有扩展作者都安装预览版。
您当前是否已安装16.1预览版? 太好了 这是您可能喜欢的一些功能。 细节剪下!

共享项目支持
扩展作者有时必须将扩展分为几个项目以支持不同版本的Visual Studio的原因有很多。 如果使用的Visual Studio早期版本不存在API,或者要支持的版本之间有重大更改。 现在,拆分扩展变得更加容易。
在Visual Studio 2019 v.16.1 Preview 1中,我们在同一解决方案中添加了对VSIX项目中对Shared Project的引用的支持。

您可以将通用代码放在单独的共享项目中,该共享项目在构建时直接编译为VSIX项目。 VSIX项目本身中唯一存在的代码就是Visual Studio支持版本的特定代码。 结果是两个单独的VSIX,它们针对自己的Visual Studio版本范围,并共享同一项目中的大多数代码。 查看执行
此操作的Extension Manager扩展的代码。
不再需要.resx文件
使用VSCT文件添加命令,菜单等时,必须指定带有
MergeWithCTOMSBuild属性标记的.resx文件。 Visual Studio中的模板负责添加此文件,并添加.resx文件引用的.ico文件。 但是,对.resx的需要是一个实现细节,并且大多数扩展都不需要使用它。
为了简化VSIX项目,对于使用最新NuGet软件包
Microsoft.VSSDK.BuildTools 16.0或更高版本的用户,已删除了.resx /.ico文件的要求。
在幕后,NuGet包提供了一个空的.resx,用于使用MergeWithCTO属性进行编译,直到您在项目中注册自己的代码为止。
每个显示器的意识
安装了.NET Framework 4.8的16.1中包括对每个监视器的附加支持。 Windows Forms UI现在在监视器的DPI缩放方面更好。 但是,这可能会在安装.NET Framework 4.8后导致扩展中的UI问题。
在扩展中使用Windows窗体时,可以通过将窗体或控件的创建打包在
DpiAwareness.EnterDpiScope中来映射Visual Studio 2017的缩放行为。
using (DpiAwareness.EnterDpiScope(DpiAwarenessContext.SystemAware)) using (var form = new MyForm()) { form.ShowDialog(); }
您需要做的就是添加一个指向NuGet包
Microsoft.VisualStudio.DpiAwareness的链接。 在面向Visual Studio早期版本的扩展中使用此程序包,但请记住,它仅在16.1和更高版本中使用时才有效。 因此,可以在跨多个Visual Studio版本的扩展中使用它。
为了简化使用不同DPI缩放比例的多个显示器的仿真,Visual Studio IDE团队的工程师创建了一个
小型便捷工具,并将其放在GitHub上 。 该团队在添加针对每个监视器的意识支持时使用了此工具,因此您也可以找到它。
阅读有关如何使用“
每个显示器的意识”的更多信息 。
同步启动已禁用
18个月前,我们向扩展合作伙伴发送了一封电子邮件,宣布同步启动扩展包已过时。 一年前,我们发布
了一篇博客文章,其中包含更多详细信息,即将来的Visual Studio版本将不支持同步自动启动程序包。 这个版本是16.1。
有关如何在启用后台加载的情况下升级到
AsyncPackage的很好的
例子 ,并且今天大多数扩展已经过渡。 如果您还没有这样做,现在是时候在16.1离开预览模式之前进行了。
新的metapackage SDK
Microsoft.VisualStudio.SDK元包是一个单独的NuGet包,它引用构成该SDK的所有各种Visual Studio包。 关于metapackage的最酷的事情是您可以访问所有接口和服务。 此外,还可以避免软件包版本不匹配的问题。
当我们发布Visual Studio 2019(16.0)时,VSIX项目模板引用了SDK元包的15.9版本。 这是因为16.0版仍在开发中。 所有单独的程序包都必须在NuGet上发布,然后才能从meta程序包中获得对它们的依赖。
好消息是我们现在终于可以使用版本16.0。 如果您的扩展程序支持版本16.0,则应使用它。 您还可以
在此处了解有关
扩展版本的更多信息。