Visual Studio Icon Visual Studio 2017 version 15.6 Release Notes

Developer Community | System Requirements | Compatibility | Distributable Code | License Terms | Blogs | Known Issues


This is not the latest version of Visual Studio. To download the latest release, please visit the Visual Studio site.

Support Timeframe

This version is now out of support. For more information about Visual Studio support, please review the Support Policy for Visual Studio 2017.

Refer to the latest version of the release notes or visit the Visual Studio site to download the latest supported version of Visual Studio 2017.

Visual Studio 2017 version 15.6 Releases

Summary of Notable New Features in 15.6

Top Issues Fixed in 15.6

These are the customer-reported issues addressed in 15.6:

See all customer-reported issues fixed in Visual Studio 2017 version 15.6.

The Developer Community Portal

Details of What's New in 15.6

Release Notes Icon Visual Studio 2017 version 15.6.0

released on March 5, 2018

New Features in 15.6


In 15.6, we continued improving solution load performance, specifically for scenarios when design time build results are cached. Large C# and Visual Basic solutions will load twice as fast as before when a solution has already been opened on a machine.

.NET Core Solution Load

We focused on .NET Core and according to our lab measurements, customers can expect 20% faster solution load times on average.

UI Responsiveness Notifications

In order to provide more transparency around extensions' impact on performance and reliability, Visual Studio performs real-time analysis to determine whether an extension is likely to have caused unresponsiveness. If an extension is determined to have caused the hang, Visual Studio will display a notification that allows the user to disable the suspect extension or suppress future notifications for that extension (Figure 1).

UI Responsiveness notification with option to disable
(Figure 1) UI Responsiveness notification option to disable extension or suppress future notifications

Installation and Setup

  • With this release, users without administration rights are able to create a Visual Studio layout that allows non-administrators to create an offline network install.
  • When you install Visual Studio for the first time or update it from the web, you will see a new, more transparent setup experience for the Visual Studio Installer. Under the hood, nothing has changed – but the new experience shows you step-by-step what's happening (Figure 2).
Improved transparency setup for Visual Studio Installer
(Figure 2) Improved transparency setup for Visual Studio Installer
We added support to pause (Figure 3) your installation and resume (Figure 4) it at a later time.
Pause your installation
(Figure 3) Pause your installation
Resume your installation
(Figure 4) Resume your installation
Installation Details

With new installation details (Figure 5), you can see the download size, download percentage completed and the rate of the download. You can also see total number of packages being installed and how many are remaining.


If you pause the installation and later resume, the progress applies to the remainer of the download and installation, and does not start from the previous count.

Installation details
(Figure 5) Installation details
IDE Setup
  • We streamlined the update process by having the update notification in Visual Studio take you directly to the installer, instead of Extensions and Updates.

  • The workloads "ASP.NET and web development" and ".NET Core cross-platform development" have been updated to include "Cloud tools for web development". This component contains everything needed to consume Azure Functions from within Visual Studio.


    When updating from 15.6 Preview 3 to Preview 4 or greater, the computer may restart automatically without notifying or confirming with the user.

Editor Improvements
  • We added Ctrl+D as the shortcut for Edit.Duplicate in the default keyboard mapping. The previous chord (Ctrl+E, V) still works, and is available in all keyboard mapping schemes.
  • We added the Expand Selection command that allows you to successively expand your selection to the next logical block. You can use the shortcuts Shift+Alt+= to expand and Shift+Alt+- to contract the current selection.

F# Language and Tooling Improvements

A lot of improvements went into F# and its tools for this release. The most significant of them are related to .NET Core SDK projects. As always, significant contributions from the community came together here, as well.

F# Compiler and Core library Improvements
  • Bug fixes and Perf improvements, by ncave, Vasily Kirichenko, and Microsoft.
  • F# collections now implement IReadonlyList and IReadonlyDictionary, by Saul Rennison.
  • NativePtr.ByRef support added, by mjmckp.
  • Async.StartImmediateAsTask support added, by Onur Gumus.
  • Seq.transpose, Array.transpose, List.transpose support added by Patrick McDonald.
  • A regression in System.Tuple types defined in F# code no longer supporting .Item1/.Item2/etc. has been fixed. Because these tuple types are now 100% synonymous with F# tuple syntax, we introduced a warning when using these properties. See the linked pull request for more details.
  • A regression and another bug fix in inference order for Statically Resolved Type Parameters have been fixed, by Gustavo Leon and Microsoft.
  • The IsSerializable property for F# types in FSharp.Core for .NET Standard has been enabled. F# types such as Option and Async are now serializable for .NET Standard and .NET Core.
  • The FSharp.Core package has been updated to version 4.3.4 and includes all changes in FSharp.Core for this release.
F# Tooling Improvements
  • File ordering for .NET Core SDK-based projects has been implemented, including Add Above/Below, folder support, and Visual Studio UI refreshing without the need to reload the project.
  • Support for multi-targeting of .NET Core SDK-based projects has been implemented.
  • Shared files are now supported in .NET Core SDK-based projects.
  • .NET Standard projects can be referenced by F#/.NET Framework projects.
  • Error reporting improvements, by Vasily Kirichenko and Eugene Auduchinok.
  • Performance improvements, by Vasily Kirichenko, Eugene Auduchinok, Daniel Wedelich, and Microsoft.
  • More precise autocompletion with numerous bugs fixes, by Vasily Kirichenko and Microsoft.
  • Static members in unopened namespaces are available in completion, by Vasily Kirichenko.
  • Namespace symbols appear in Document Highlight and Find All References, by Vasily Kirichenko.
  • Structured Guidelines code has been made available for other editors (VSCode, VS for Mac, Rider), by Eugene Auduchinok.
  • Better collapsing and structured guidelines for F# constructors, by Eugene Auduchinok.
  • Open statements are no longer simplified in the Simplify Names analyzer, by Vasily Kirichenko.
  • Display of sbyte and byte IL fields in QuickInfo is now supported, by Vasily Kirichenko.
  • Unused declaration code fix is no longer triggered on uncalled F# functions or methods, by Vasily Kirichenko.
  • Drag and Drop across folders in .NET Framework projects is now supported, by Paulo Nobre.
  • The unused declarations analyzer and code fix can now be toggled.
  • Bug fixes and performance improvements, by Eugene Auduchinok and Microsoft.
  • Code surrounded by #if INTERACTIVE defines now support IDE features that do not require type checking, by Eugene Auduchinok.
  • An inadvertent reversion of a fix for empty "New file" window on older F#/ASP.NET (.NET Framework) projects has been fixed, by Loïc Denuzière.
F# Infrastructure and Open Source Improvements
  • Versioning update RFC has been implemented.
  • All localization files used in the compiler and tools are available on GitHub, and are able to accept community contributions.
  • Nightly builds can be produced in an hour; down from 4+ hours.
  • We removed our dependency on the Windows 10 SDK for open source contributors.
  • Satellite assemblies and FSharp.Core.resources.dll are now included in the F# compiler SDK.
  • The compiler no longer rebuilds itself in the Visual F# codebase if assembly info has not changed.
  • ToString() is implemented for FSharpSymbolUse to make it easier to look at all symbol use results when debugging editor tooling, by Eugene Auduchinok.

To see the full commit changelog for the 15.6 release, see our tag.


See all existing known issues and available workarounds in Visual Studio 2017 version 15.6.

Visual C++ Improvements

  • This release contains a fix for the PDB security issue described in CVE-2018-1037.
  • Create CMake projects from the Add New Project dialog.
  • You can now choose whether or not to automatically generate the CMake cache when you open new CMake projects in Visual Studio.
  • CTest, Google Test, and Boost.Test tests in CMake projects are automatically discovered and listed in Test Explorer.
  • Easily add Boost unit tests to your project with Boost.Test item templates. Your Boost unit tests now use the Boost dynamic library.
  • Support for C++17 guaranteed copy elision.
  • Built-in support for Android NDK r15c for Android development.
  • Support in Visual Studio Android tools for Android apps that are built with SDK level 25 and lower to deploy and run on Oreo devices.
  • Further progress toward implementing the C++17 Standard Library, including APIs such as stable_sort, partition, inline vector::emplace_back in parallel, and <memory_resource>, per C++17 standards.
  • Missing include files are automatically discovered for C++ Open Folder if they exist under the workspace root, even if they are not explicitly added to the include path.
  • Debug options are available for Embedded ARM GCC support. Right-click your binary, choose Debug and Launch Settings, and then select C/C++ Debug microcontroller.
  • Profile-Guided Optimization is enabled and fully supported on ARM64.
  • Added more rules to the C++ Core Guidelines Check extension that help you make your code cleaner, more secure, and maintainable.
    • A C++ Core Checker extension to detect use of indirections with a lifetime that is out of scope.
    • 5 new checks enforcing rules around integer overflow, and additional rules from the C++ Core Guidelines.
    • C++ Core Check now includes a set of code analysis rules for detecting arithmetic overflows.
  • Support for running single file Code Analysis (or on your selection of files from the Solution Explorer); cleaned up the Build and Analyze menus. "Run Code Analysis" no longer runs code generation, which speeds up analysis runs.
  • IntelliSense errors for inactive configurations are shown as purple squiggles in the editor. The number of configurations to process is configurable in Tools > Options.
  • Significant compile-time improvements:
    • The compiler optimizes your code to run faster through improved optimizations of pre-incremented loops and improved identification and propagation of constant global data in LTCG.
    • Compile times are shorter compared to 15.5. The compiler front-end is between 3-5% faster on most inputs. The compiler optimizer is 3% faster due to reduced overhead of core optimization algorithms. Additionally, large LTCG compilations are 10% faster due to re-architected data structures.
  • Mapfile generation overhead is reduced in full linking scenarios. We still recommend using PDB files instead of mapfiles.
  • The MSVC compiler supports the /Qspectre switch on all architectures, including x86, x64, ARM, and ARM64.

C# Compiler

The C# compiler now supports:

  • Compiler server on CoreCLR, for build throughput performance.
  • Strong name signing on CoreCLR (/keyfile option, all OSes).

In addition to numerous bug fixes and one breaking change (see running list of breaking changes), two minor language changes were made to the 7.2 language features:

Visual Studio Tools for Xamarin

This release includes Xamarin.iOS 11.8 and Xamarin.Android 8.2.

Live XAML Previewing with the iOS Simulator

The Xamarin Live Player enables developers to continuously deploy, test, and debug their apps using just Visual Studio and an iOS or Android device. Visual Studio 2017 version 15.5 added support to enable developers to preview real-time XAML changes directly in the Android emulator without requiring a recompile or redeploy. This release brings this functionality to the Remoted iOS Simulator for Windows.


For this release, we have removed the need for a completion database in order to get IntelliSense on installed packages (Figure 6). This means that instead of waiting up to four hours after installing a package, you will now get completions in just a few seconds for popular packages such as numpy and pandas.

Python completions for the pandas package
(Figure 6) Python completions for the panda's package

We have added the ability to customize the color used for doc-strings, when they are used in a class or function, and also regular expression patterns detected as part of a call into the re library (Figure 7). These may be changed under Tools > Fonts > Colors, "Python Documentation" and "Python Regular Expression".

Example of highlighted doc-string and regular expression
(Figure 7) Example of highlighted doc-string and regular expression

Finally, for Anaconda users, we are experimenting with detection and integration of conda. When enabled, your conda environments will appear within Visual Studio automatically, and we will use conda rather than pip to manage packages. See the what's new for Python in Visual Studio 15.6 blog post for more information.

Debugging and Diagnostics

CPU Usage Tool

The CPU Usage tool can display logical call stacks for asynchronous code (aka 'Async Call Stack Stitching') (Figure 8).

  • To see logical call stacks (i.e. 'stitched call stacks'), turn on the "Stitch Async Code" setting in the Filter drop-down menu of the CPU Usage tool.

  • Asynchronous code running on behalf of a parent function or Task will appear as a child in the Call Tree and Caller/Callee views.

  • This change makes it easier to navigate asynchronous code and understand its performance characteristics.


    This feature can take a long time to produce the logical call stacks for some async code patterns. You can cancel the analysis and turn off the setting if necessary. This behavior is only available during post-mortem style profiling using the ALT-F2 Performance Profiler launch page. When the CPU Usage tool is used during debugging, it does not shows logical call stacks.

Logical Call Stack Tree with Call Stack Stitching in effect
(Figure 8) Logical Call Stack Tree with Call Stack Stitching in effect

The CPU Usage tool (available during F5 Debugging in the Diagnostic Tools window and in the ALT-F2 Performance Profiler) now displays source line highlighting based on the CPU consumption of specific lines of code (Figure 9).

  • When you view the Call Tree or Caller/Callee views of the CPU Usage tool, the source for the selected function is displayed with CPU consumption indicated on each source line of the function.

  • If CPU performance of a function is a concern, now you can determine specifically what source lines of the function are responsible for the CPU consumption when the function was executing.


    This feature requires that source information be included in the generated PDB that is controlled by the project settings. Projects for PDBs that do not have source information will not display either the line attribution or the source file.

CPU Usage tool with source line highlighting
(Figure 9) CPU Usage tool with source line highlighting
Thread Name Support

Per user feedback, the debugger is now able to display thread names that are set through SetThreadDescription APIs in dump debugging. This feature requires dumps to be collected on Windows 10 Fall Creators Update or later builds.

Snapshot Debugger

If you are working on an ASP.NET application running in Azure App Service, and would like to try out Snappoints or Logpoints, you can do so by selecting "Snapshot Debugger (Azure App Service)" in the Debug Target dropdown (Figure 10).

Start Snapshot Debugger for ASP.NET application
(Figure 10) Start Snapshot Debugger for ASP.NET application

.NET Productivity

In 15.6 Preview 2, we added the ability to navigate to decompiled sources. When enabled, invoking Go To Definition or Peek Definition on any referenced type or member will show its definition with reconstructed method bodies through ILSpy decompilation. To turn on this feature, go to Tools > Options > Text Editor > C# > Advanced > Enable navigation to decompiled sources (Figure 11).

Navigate to decompiled sources
(Figure 11) Navigate to decompiled sources

We also added a couple more .NET EditorConfig options:

  • dotnet_prefer_inferred_tuple_names
  • dotnet_prefer_inferred_anonymous_type_member_names


To see all .NET coding convention options, check out .NET coding convention settings for EditorConfig.

Visual Studio Web Tools

  • Solution Explorer has a new capability for .NET Core projects called "file nesting" that allows users to control how related files appear in Solution Explorer.
  • The project publishing experience has been updated.
  • In the New Project dialog:
    • the drop-down that lets you pick a version of .NET Framework has been moved to the bottom of the dialog and no longer acts as a filter for the template.
    • for the node "Web", the sub-node "Web Site" has been renamed to "Previous Versions".
  • The debug drop-down for WebForms and MVC 5 projects:
    • allows users to select the Snapshot Debugger for Azure App Service deployed apps.
    • has been updated to have the same browser selection gesture as ASP.NET Core projects.

Continuous Delivery Tools

For solutions under source control, you can click on the Continuous Delivery tile in Team Explorer to configure automated build and deployments for your application.

Configure Continuous Delivery Tools
  • We added support for TFVC as a source control provider. You can configure continuous delivery for solutions under source control in a VSTS TFVC team project (Figure 12).
Configure Continuous Delivery for projects in a VSTS TFVC project
(Figure 12) Configure Continuous Delivery for projects in a VSTS TFVC project
  • We added support for Git authentication over SSH. You can configure continuous delivery for solutions under source control in a VSTS or GitHub Git repo with SSH AUTH enabled.

  • We introduced support for containerized projects. You can configure continuous delivery for solutions with ASP.NET Core projects and docker support targeting Azure App Service on Linux (Web App for Containers) (Figure 13). The Configure Continuous Delivery dialog will default to create a new Azure App Service on Linux (Web App for Containers), and an Azure Container Registry if one does not already exist under your Azure Subscription.

Configure Continuous Delivery to Azure dialog for App Service on Linux
(Figure 13) Configure Continuous Delivery to Azure dialog for App Service on Linux

Team Explorer

Git Tag Support

We have added more support for Git tags. You can now create, delete, and push tags. On the Tags page, you can view all of the tags in your repo, and create a new branch from a tag. This was one of our most requested features from UserVoice.

For Visual Studio Team Services users, you can check out pull request branches. This feature makes it easier to review pull requests, test changes, and build your code.

Tools for Universal Windows Platform Developers

The Windows 10 Insider Preview SDK (Build 17095) can be installed as an optional component with the Universal Windows Platform development workload.


File versions for a number of Visual Studio executables – devenv.exe, blend.exe, wdexpress.exe, and vsga.exe – reflect the minor release (for example 15.6.*).


This does not affect any functionalities, but external code relying on executable file version numbers may need to be updated.

Test Explorer

New Hierarchy View

Test Explorer in Visual Studio now has a hierarchy view (Figure 14) that organizes your tests by Project, Namespace, and then Class. This view can be toggled on and off using the hierarchy button located at the top of the Test Explorer window next to the Group By button.

Test Explorer Hierarchy View
(Figure 14) Test Explorer Hierarchy View

This feature not only makes navigating your tests much easier, but also gives better feedback on tests at a glance.

  • The "parent nodes" in the hierarchy (Project, Namespace, and Class) display a failing test icon if they contain at least one failing test.
  • Parent nodes are also followed by a number summarizing how many tests the grouping contains. The duration in milliseconds shown to the right of a parent node is the total time that tests within that group took to execute.
Real Time Test Discovery

Tests are discovered automatically with Real time test discovery (Figure 15) without requiring you to build your managed project. This allows Test Explorer to stay in sync with code changes such as adding, removing, or editing tests. Note that unlike Hierarchy View feature described above, which is available for all types of projects, the automatic test discovery feature is only available for C# and Visual Basic projects.

Xamarin Live Player
(Figure 15) Animation of the Xamarin Live Player pair, deployment, and live edit modes
Win10 IoT Core Testing Support

We introduced support for testing Win10 IoT Core applications. Tests for such UWP applications can now be deployed to, debugged, and executed, on device. The tests are also fully integrated into Test Explorer. Deployment and execution support is availalbe through VSTS CI as well. Thus, Win10 IoT Core applications have full support in the edit, compile, debug, test cycle within Visual Studio, and in the Continuous Integration workflow in Visual Studio Team Services.

Win10 IoT Core Testing
(Figure 16) Win10 IoT Core Testing

Visual Studio Build Tools

The Visual Studio Build Tools allow you to create build servers without installing all of Visual Studio. The installer already supports C++, ASP.NET, and .NET Core for Desktop projects. In response to customer requests, we are enhancing the Visual Studio Build Tools to support additional project types. In this release we have added support for TypeScript and Node.js projects. We expect to add support for more project types in future releases. This is the download location for the Visual Studio Build Tools for this release.

Visual Studio ClickOnce Tools

ClickOnce is a deployment technology that enables you to create self-updating Windows-based applications that can be installed and run with minimal user interaction. It uses certificates to verify the authenticity of the application's publisher, and to sign the application and deployment manifests to prove that the files have not been tampered with. In this release we have added support for signing the application and deployment manifests with Cryptography Next Generation (CNG) certificate.

Key Vault

We added the Azure Services Authentication Extension in-box for Visual Studio 15.6. This will allow projects that use the Microsoft.Azure.Services.AppAuthentication library to access Azure resources such as Key Vault using their Visual Studio accounts.

Automatic macOS Provisioning

Building iOS apps with Visual Studio on Windows just got easier. This release adds a brand new feature called automatic macOS provisioning. Rather than needing to manually maintain a Mac build machine, all you need to do is connect to the Mac, and we will handle the heavy lifting of installing and configuring your build machine with the correct Xamarin.iOS and Mono bits, all from Visual Studio.

iOS Wi-Fi Deployment

The Remoted iOS Simulator that allows developers to test and debug iOS apps entirely in Visual Studio on Windows, is available to all editions of Visual Studio (as of version 15.5), including the free Community Edition! The simulator supports functionality like location simulation, rotation, gestures, and even includes functionality that the iOS simulator on Mac does not, like multi-touch. This provides a great simulator experience for developers building iOS apps on Windows, but what about devices? With Visual Studio 2017 version 15.6, you can deploy your iOS apps over the network with Wi-Fi deployment – no cables required! After setting up a wireless device in Xcode, it shows up in Visual Studio just like a normal deploy target.

Release Notes Icon Visual Studio 2017 version 15.6.1 Servicing Update

released on March 8, 2018

Top Issues Fixed in 15.6.1

These are the customer-reported issues addressed in this release:

Release Notes Icon Visual Studio 2017 version 15.6.2 Servicing Update

released on March 13, 2018

Summary of Updates in 15.6.2

CVE-2018-0875: Microsoft Security Advisories for .NET Core

Microsoft is aware of a security vulnerability in the public versions of .NET Core where a malicious file or web request could cause a denial of service (DoS) attack.


System administrators are advised to update their .NET Core runtimes to versions 1.0.10, 1.1.7 or 2.0.6. Developers are advised to update their .NET Core SDK to versions 1.1.8 or 2.1.101.

Top Issues Fixed in 15.6.2

These are the customer-reported issues addressed in this release:

Release Notes Icon Visual Studio 2017 version 15.6.3 Servicing Update

released on March 19, 2018

Summary of Updates in 15.6.3

CVE-2018-0875: Microsoft Security Advisories for .NET Core

Microsoft is aware of a security vulnerability in the public versions of .NET Core where a malicious file or web request could cause a denial of service (DoS) attack.


System administrators are advised to update their .NET Core runtimes to versions 1.0.10, 1.1.7 or 2.0.6. Developers are advised to update their .NET Core SDK to versions 1.1.8 or 2.1.101.

Top Issues Fixed in 15.6.3

These are the customer-reported issues addressed in this release:

Release Notes Icon Visual Studio 2017 version 15.6.4 Servicing Update

released on March 22, 2018

Top Issues Fixed in 15.6.4

These are the customer-reported issues addressed in this release:

Release Notes Icon Visual Studio 2017 version 15.6.5 Servicing Update

released on April 4, 2018

Top Issues Fixed in 15.6.5

These are the customer-reported issues addressed in this release:

Release Notes Icon Visual Studio 2017 version 15.6.6 Servicing Update

released on April 10, 2018

Summary of Updates in 15.6.6

CVE-2018-1037: Microsoft Security Advisories for Microsoft Visual Studio Information Disclosure Vulnerability

An information disclosure vulnerability exists when Visual Studio improperly discloses limited contents of uninitialized memory while compiling program database (PDB) files. An attacker who took advantage of this information disclosure could view uninitialized memory from the Visual Studio instance used to compile the PDB file.

To take advantage of the vulnerability, an attacker would require access to an affected PDB file created using a vulnerable version of Visual Studio. An attacker would have no way to force a developer to produce this information disclosure.

The security update addresses the vulnerability by correcting how PDB files are generated when a project is compiled.


For more information, see the security update for CVE-2018-1037.

Top Issues Fixed in 15.6.6

These are the customer-reported issues addressed in this release:

  • This release addresses an issue where some Application Insights users were not seeing CodeLens requests and exceptions indicators when the solution first loads.

Release Notes Icon Visual Studio 2017 version 15.6.7 Servicing Update

released on April 26, 2018

Summary of Updates in 15.6.7

  • VS is more responsive when running Git operations.
  • Debugging large solutions with /debug:fastlink PDBs is more robust. Changes in the PDB/DIA lead to reduced latency and a 30% reduction in heap memory consumption in the VS debugger that used to cause crashes.

Top Issues Fixed in 15.6.7

These are the customer-reported issues addressed in this release:

  • C++ compiler bugfixes:
    • Fix for the SSA optimizer incorrectly sinking a function call past a store to a variable used in a __finally handler.
    • Fix for the SSA optimizer sometimes incorrectly analyzing memory loads from locations with negative offsets.
    • Fix for the optimizer incorrectly transforming a pre-incremented loop into a post-incremented loop. This was found compiling the ICU project.
  • We have bumped up to Java™ Development Kit 8, Update 172 (JDK version 8u172).

Known Issues

We are fully committed to listening to your feedback. Visit the Developer Community site to find the latest issues, log new issues, and upvote existing issues. See all existing known issues and available workarounds in Visual Studio 2017 version 15.6.

Visual Studio 2017 Known Issues

Feedback & Suggestions

We would love to hear from you! For issues, let us know through the Report a Problem option in the upper right-hand corner of either the installer or the Visual Studio IDE itself. The Report a Problem Icon icon is located in the upper right-hand corner. You can make a product suggestion or track your issues in the Visual Studio Developer Community, where you can ask questions, find answers, and propose new features. You can also get free installation help through our Live Chat support.


Take advantage of the insights and recommendations available in the Developer Tools Blogs site to keep you up-to-date on all new releases and include deep dive posts on a broad range of features.

Developer Tools Blogs

Visual Studio 2017 Release Notes History

For more information relating to past versions of Visual Studio 2017, see the Visual Studio 2017 Release Notes History page.

Top of Page