Visual Studio 2015 Update 3

Last Update: 2017/4/7

发布日期:2016 年 6 月 27 日

今天,我们非常高兴地宣布正式推出 Visual Studio 2015 Update 3。 Update 2 中报告的首要问题是高内存消耗。 我们在 Update 3 RC 解决了此问题,与报告此问题的客户取得了联系,并收到关于修复的肯定确认。 在 Update 3 中,你可以看到很多针对解决客户反馈的有关性能和稳定性的修复。 如果这些不是你想了解的发行说明,表示你查看了发行说明的最新版本。

使用 Visual Studio 中的反馈选项将你的反馈发送给我们。 你还可以在 Visual Studio 2015 UserVoice 网站上提交建议。

下载

可从 My.VisualStudio.com 下载 Visual Studio 2015。 My.VisualStudio.com 需要免费的 Dev Essentials 订阅或 Visual Studio 订阅

有关其他信息,请参阅如何安装特定版本的 Visual Studio

新增功能

其他更改

适用于 Apache Cordova 的工具

Visual Studio 2015 Update 3 包括适用于 Apache Cordova Update 10 的工具,包括以下改进。 有关此发行版的详细信息,请参阅 Update 9Update 10 的用于 Apache Cordova 的工具的发行说明。 有关我们工具的最新新闻,请访问 GitHub 上的开发人员博客

  • 我们添加了对 Cordova 6.1.1 的支持,这是新项目的默认版本。
  • 我们已停用曾在 Cordova 4.x 中使用的 Cordova 插件注册表,这意味着现在要添加插件,至少需要 Cordova 5.x 或更高版本。
  • 更新了核心插件列表,现在包含了用于企业方案的插件,例如 Intune、Azure Engagement、安全性和 SQLite 本地存储。
  • 现在你可以按 npm 包名称或按 ID 从配置设计器添加插件。

plugin-byid

  • 你也可以从配置设计器添加需要参数的插件。

plugin-parameters

开发人员分析工具

我们在开发人员分析工具 v7.0.2 中添加了已下改进:

  • Application Insights Trends 是一个在你的应用的遥测中查找趋势的工具。
  • CodeLens 中的异常遥测。
  • 将生产遥测信息添加到诊断工具中的异常。
  • 支持将 Application Insights 从 Visual Studio 添加到 ASP.NET 核心 RC2 项目。
  • 用于 ASP.NET 5 RC1 和 ASP.NET 核心 RC2 项目的诊断工具事件。
  • 选中详细信息筛选器、时间范围和事件时,自动刷新 Application Insights 搜索。
  • 在搜索中从请求转到代码。
  • 改进了 HockeyApp 登录体验。

有关详细信息,请参阅 Microsoft Azure 文档中的技术发行说明

调试和诊断

在 OneCore 设备上运行的诊断工具应用支持(包括 HoloLens 和 IOT)已添加到 Update 3 中。

“C++ 编辑并继续”改进:

  • 启用 FASTLINK 时,性能和可靠性提升。
  • 成功向不再生成陈旧代码的静态库应用代码更改。
  • 对于重新编译期间产生的类型更改误报,不再显示 C4656 警告。
  • 支持跨多个编译单位添加一个具有同一名称的新类型。

XAML UI 调试改进:

  • 每当应用中的焦点发生变动,实时可视化树中的全新“跟踪焦点”功能将使实时可视化树中的选中内容更新到当前具有焦点的元素。

Visual Studio IDE

订阅和产品密钥

我们在 Update 3 中解决了一些客户所反馈的问题(这些客户通过联机标识或产品密钥解锁 IDE 来使用订阅),使用的方法如下:

  • 不再需要访问 https://my.visualstudio.com 来激活已分配的 Visual Studio 云订阅,并且可以在分配了订阅后立即开始使用 Visual Studio IDE。
  • 我们改进了应用产品密钥时的错误处理效果。
  • 所有用户帐户和授权操作现在使用 HTTPS 进行保护。
  • 对于用于激活订阅和输入产品密钥的“帐户设置”对话框,我们进行了可访问性方面的改进。
  • 不再要求每隔 8 天重新进行身份验证以保持个性化帐户处于活动状态并同步漫游设置。

适用于通用 Windows 应用的工具

Visual Studio 2015 Update 3 中对用于通用 Windows 应用的工具进行了一定程度的功能提升。 一项重要的改进是:创建要提交到 Windows 应用商店的包时,可以使用 AAD 应用商店帐户的 Azure Active Directory 凭据进行登录。 项目一旦与 Windows 应用商店关联后,无需再进行登录便可创建包以提交到存储区。

适用于通用 Windows 应用的 .NET Native

.NET Native 1.4 是次要服务版本,可以提高性能、解决几个用户报告的 Bug,以及改善大型应用的版本生成编译时间。 XAML 应用程序和使用 .NET Native 1.4 的 Unity 游戏将具有更好的运行时性能。 这些改进通过加速反射和本机 API 调用的运行来实现。

体系结构工具

我们已经解决了客户对提高性能和稳定性的反馈。

域特定图形设计器(包括 EDMX 和 DBML)

在 Windows 10 中,如果在显示屏幕键盘的同时打开或尝试编辑大型 EDMX 或 DBML 图,则 Visual Studio 可能不再无响应。

代码图

  • 尝试“生成解决方案的代码图”,且解决方案包含安装程序项目 (.vdproj) 时,Visual Studio 不再无响应。
  • 从代码编辑器运行代码映射命令以及在“代码图”窗口出现时立即关闭它时,Visual Studio 不再无响应。

层验证

  • 在使用验证操作构建一个解决方案,且该方案具有一个包含层关系图的建模项目时,在构建完成后 CPU 内核将不再使用。
  • 如果层关系图的父级建模项目引用了 PCL 库(如 ODP.Net),则现在可以对其进行验证。

适用于 Visual Studio 的 Node.js 工具

适用于 Visual Studio 的 Node.js 工具 1.2 RC 现已可供下载。 我们预期该版本将提供显著提升的稳定性和性能,包括减少在较早版本中出现的内存不足崩溃的问题。

其他要点包括:

  • 更快、更好的 ES6 IntelliSense
  • 更可靠的调试
  • 改进的单元测试体验(包括磁带支持)
  • 在多个项目类型中的 .npm 命令

有关完整信息和下载,请参阅 Node.js Tools 1.2 RC release page(Node.js 工具 1.2 RC 发行页)。

Web 开发人员工具

对于 ASP.NET Web 应用程序项目,如果未勾选“启用编辑并继续”复选框,每当你停止调试时,IIS Express 进程将不再停止。

Visual C++

增强功能(如新的检查和 c + + 编译器的警告消息以及对 C# 和 Visual Basic 代码的支持和性能改进)均包含在 Update 3 中。

C++ 编译器

  • 我们现在会检查已删除的普通复制/移动 ctor 的访问权限。 如果不进行这项检查,我们可能会错误地调用默认的复制 ctor(其中的实现可能格式不正确),并可能导致运行时代码生成错误。
  • 现在,当复制构造函数被删除或为私有时,Std::is_convertible 将会正确检测到类类型的自我赋值。
  • 当弃用特性化 ATL 支持这一操作的最后阶段在 Visual Studio 2008 中启动时,我们已向编译器添加了新的弃用警告。 通过 Visual Studio 2015 Update 3,特性化 ATL 代码的使用将生成默认启动的 1 级警告。 C4467
  • 使用 PCH 文件时,如果在 -Yc 和 -Yu 编译之间错误地将 -I 包含目录与编译器匹配起来,将触发一个新的警告。 C4599
  • 使用 PCH 文件时,如果在 -Yc 和 -Yu 编译之间错误地将源文件中的 #包含指令匹配起来,将触发一个新的警告。 C4598

有关这些更改可能会如何影响你的现有代码的详细信息,请参阅 MSDN 上的 Visual C++ 移植和升级指南

C++ 库

  • 我们恢复了销毁 Update 2 中回归的一系列普通项目时的调试模式性能,与向量中类似。
  • 我们实现了提案 P0185 Adding [nothrow-]swappable traits 中 C++17 工作文件中的可交换特点。 作为推理 C++17 功能,当使用 /std:c++latest 进行编译时,这些特点(is_swappableis_swappable_withis_nothrow_swappableis_nothrow_swappable_with)仅为可视状态,而 std::swap 上的约束仅为活动状态。
  • 我们从 vcruntime140.dll 和静态库删除了之前在进程启动和 dllmain 期间触发的 ETW 事件处理调用。
  • 我们删除了 STL 容器使用的常见机械中的符号名称长度(如 std::vector),从而降低了 C4503 警告的可能性。 例如,以下类型将不再生成警告:concurrency::concurrent_unordered_map<>>>>。

  • ATL/MFC/AMP/PPL:修复了大量与两阶段查找相关的一致性问题,如下所示:

    • _com_ptr_t 现在具有移动构造函数和移动赋值运算符。
    • MFC:修复了 HMENU 值的处理问题,此前的处理方式有时会导致菜单在 64 位的应用程序上无法正确显示。

    • ATL/MFC:不再发出以下警告:

    • 函数重写/隐藏:C4263、C4264、C4266
    • 错误匹配异常规范:C4986
    • /分析:C6386

    • ATL:AtlThrow 的所有变体现在均已正确标记为 __declspec(noreturn)。 这样可以防止发出错误的 SAL 警告。

    • ATL:修复/改进了几个 SAL 批注。

    • /std:c++latest 启用了以下新功能:P0025R1 "clamp()"、P0185R1 "is_swappable, is_nothrow_swappable" 和 P0272R1 "Non-const basic_string::data()."。

    • /std:c++latest 还控制以下旧功能的删除:N4190 "Removing auto_ptr, random_shuffle(), And Old Stuff"、P0004R1 "Removing Deprecated Iostreams Aliases"、LWG 2385 "function::assign allocator argument doesn't make sense",以及各种非标准功能(std::tr1 命名空间,某些仅适用 TR1 的机制,以及 std::identity 结构)的删除。

    • 修复了用于 x86 设备的 atomic/atomic 中的无提示不良 codegen。

    • 除非绝对必要,STL 现在会避免使用线程安全的“神奇静态对象”,从而改进了 codegen。

    • 元组的完美转发构造函数现在可避免外向争用复制构造函数,由此修复了某些方案中的编译器错误。

  • 协同程序:

    • 不推荐使用后列项:__yield_value & __await 关键字。 请改用 co_await / co_yield
    • 向后列项添加了弃用通知:coroutine_handle 类的 to_addressfrom_promise 成员。 使用 coroutine_handle::address() 而非 coroutine_handle::to_address()
    • 使用 coroutine_handle::from_promise(Promise &P) 而非 coroutine_handle::from_promise(Promise *P)
  • 我们通过使用更主动的方式分派到 memcmp 和 memchr,改进了以下的性能:std::equalstd::lexicographical_compare,从而极大提升了某些方案中的性能。 例如,64 位平台上的 equal(char,char,char, char)。

    • 通过减少迭代器调试机制中簿记函数调用的数量,加大对内部版本的调试力度。
    • 相较发行版本中的 Update 2,string::push_back 获得另外 40% 的改进,同时调试版本获得了更多实质性的改进。 (这是除 Update 2 中较大性能改进之外的改进)。
    • 已通过消除多种类型的空模板元编程支持调用(例如 _Iter_cat)跨所有标准算法,以及通过减少谓词复制的数量跨所有采用谓词的算法,对调试版本进行了改进。
    • std::mismatch_ITERATOR_DEBUG_LEVEL 1 和 2 下,它在迭代之前,在可能的情况下按范围检查第二个范围。
  • 我们对其余算法(在 Update 2 中,仅少数算法与新的弃用机制挂钩)应用了针对 _SCL_INSECURE_DEPRECATE 消息的改进诊断。 这在调试到标准算法内部时还能改善调试体验,因为不再有任何 _ITERATOR_DEBUG_LEVEL 处理器交互会声明多个标准算法的副本。 我们还进行以下内容的修复:

    • 我们修复了因非标准 _ITERATOR_DEBUG_ARRAY_OVERLOADS 和双范围算法之间的交互而导致无法编译某些函数(如 mismatch(iter, iter, T[]))的问题。
  • 我们修复了 STL 中默认关闭的警告 C4242 的冲突。
  • 我们修复了 Std::pop_heap 中可能发生的整数溢出 Bug。
  • 我们修复了因进行插入 CLR 的 LoadLibrary 调用的同时保留了区域设置锁定而导致 /clr:pure 下可能发生的挂起现象。

C++/CLI 调试

  • C++/CLI 表达式计算器现在支持调试器功能,如 Natvis(以前仅对纯本机应用提供支持)。 现在,在混合托管/本机应用中,当对象在变量窗口列出(或在数据提示内)时将进行扩展(与在类型可视化工具定义的纯本机应用中的扩展类似)。

plugin-byid

Clang/C2 平台工具集

我们已将 Clang 3.8 版本集成到 Clang/C2,并提供 64 位托管工具集。

C++ MDD

我们已启用对最新 Android NDK 版本 R11C 的支持并支持升级当前项目以面向最新 NDK 这一功能。

TypeScript

Visual Studio 2015 Update 3 包含 TypeScript 1.8.34。 我们已修复了内存不足的错误(通过使用 AngularJS 的一些大型 TypeScript 项目)。

C# 和 Visual Basic

我们在降低内存占用量和提升代码诊断性能方面投入了大量工作。 这将减少在较早前版本中出现的大量的内存不足的故障。 我们改进了整个解决方案上代码诊断运行的性能。 要了解有关代码诊断性能提升的详细信息,请参阅 MSDN 上的 How to: Enable and Disable Full Solution Analysis for Managed Code(如何:启用和禁用托管代码的完整解决方案分析)页。

其他改进包括:

  • 用于添加对 NuGet 包的引用以作为一种快速修复方式的选项:

plugin-byid

可从“工具”>“选项”>“文本编辑器”> C# >“高级”的“使用指令”下启用此选项:

plugin-byid

  • 我们改进了对面向 .NET 平台标准的可移植类库的支持。
  • 我们向“C# GoTo 实现”和“查找所有引用”添加了性能改进。 可通过选择一个对象,右键单击该对象,然后从菜单中选择该对象,来体验这些改进。
  • 当将“全部修复”操作应用于文档/项目/解决方案时,现在会显示一个进度条。
  • 提升了大型解决方案中加载 C# 和 VB 项目的性能。 有关更多信息,请参阅:Performance considerations for large solutions(针对大型解决方案的性能注意事项)。

团队资源管理器

修复了团队资源管理器中的几个 Bug:

  • 无法查看从 Git 存储库删除的文件内容。
  • 查看分支的历史记录时,当焦点是最新提交时,应禁用“转到子图标”。
  • 使用 Git.exe 更改分支时,Visual Studio 可能崩溃或进入未知状态。
  • 在 Git 存储库中查看分支的历史记录时,记录图表中的突出显示存在问题。
  • 在团队资源管理中创建分支时,创建分支的 Alt+B 快捷键与生成菜单冲突。
  • 在较高的内存使用情况下,当尝试对大于可用内存的对象进行解压缩时,Git 给出“找不到对象 - 没有任何匹配的松散对象 ()”的错误,而不是内存不足的错误。
  • 错误消息中拼写有误“...按顺序打开此解决方案...”。
  • 查看某个分支的历史记录并右键单击历史记录中的第一个提交时将禁用“挑拣”。
  • 从团队资源管理器分支页上下文菜单创建拉取请求时,使用当前分支来替代所选分支。

Xamarin for Visual Studio

Visual Studio 2015 Update 3 现在包括 Xamarin 4.1。 除了大量的 Bug 修复,该版本还添加了对 tvOS 的支持,提升了 iOS 资产目录支持,改进了 XML 编辑体验,并在创建 iOS 应用时添加了 SSL/TLS 和 HttpClient 实现的选择器。 有关更多信息,请参阅 Xamarin 发行说明

已知问题

有关此版本中已知问题的完整说明,请参阅下面的 MSDN 文章:Visual Studio Update 3 中的已知问题