Quantcast
Channel: Category Name
Viewing all 10804 articles
Browse latest View live

Jenkins Azure ACR Build plugin now in public preview

$
0
0

Last year at Jenkins World, we announced Jenkins on Azure support for Kubernetes. We shipped the Azure Container Agent which allows you to scale out to Azure and run a Jenkins Agent on Azure Container Instances (ACI) and/or Azure Kubernetes Service (AKS). Using the Kubernetes Continuous Deploy or Deploy to Azure Container Services (AKS) plugins, you can deploy containers to Kubernetes.

Back in April, we published a blog post in Kubernetes.io sharing with the community how to achieve Blue/Green deployment to Azure Container Services (AKS). Some questions remained to be answered though:

  • What if I need to build a Docker image when I use ACI as my Jenkins build agent?
  • If I run Docker Build on AKS, is it secured?

Earlier this year, the Azure Container Registry team released a preview of a native container build capability called Azure Container Registry (ACR) Build, which solves just these problems. One of the best things about ACR build is you only pay for the compute you use to build your images.

Build from local directory

Let’s say you have an existing pipeline that uses Maven to build your Java project and then deploys to AKS:

node {
    /* … snip… */

    stage('Build') {
    sh 'mvn clean package'
    withCredentials([usernamePassword(credentialsId: env.ACR_CRED_ID, usernameVariable: 'ACR_USER', passwordVariable: 'ACR_PASSWORD')]{
      sh 'docker login -u $ACR_USER -p $ACR_PASSWORD http://$ACR_SERVER'
      // build image
      def imageWithTag = "$env.ACR_SERVER/$env.WEB_APP:$env.BUILD_NUMBER"
      def image = docker.build imageWithTag
      // push image
      image.push()
    }
    stage(‘Deploy’) {
      /*… snip… */
    } 
}

Since ACR Build supports builds from your local directory (in this case the build server local directory), you can replace the five lines of code with one line in your pipeline like this:

node {
  /* … snip… */
  stage('Build') { 
    sh 'mvn clean package'

    acrQuickBuild azureCredentialsId: 'principal-credentials-id',
                  resourceGroupName: env.ACR_RES_GROUP,
                  registryName: env.ACR_NAME,
                  platform: "Linux",
                  dockerfile: "Dockerfile",
                  imageNames: [[image: "$env.ACR_REGISTRY/$env.IMAGE_NAME:$env.BUILD_NUMBER"]]
  }  
  stage(‘Deploy’) {
    /*… snip… */
  }
}

The benefits

  • Apart from AKS, you can now run this build pipeline in ACI.
  • ACR Build enables network close, multi-tenant builds, reducing the network distance, and ensuring reliability of Docker push to the registry.
  • Best yet, you no longer need to get into another debate with your peers about whether it is safe to run Docker on Docker.

Build based on git commits

What if you are setting up a new pipeline and just want to trigger build upon code commit? Fear not, ACR Build supports commit based builds. We set up a sample Jenkins file that allows you to build a Spring Boot Web App in ACR with deployment to AKS. In this case, once code is committed to GitHub, Jenkins will trigger the build in ACR, you can run tests (not covered in sample) and then deploy the Docker image to production. Simply follow the instructions on building a Docker image from git repo in ACR then deploying to AKS using Jenkins.

We will preview Azure ACR plugin at Jenkins World 2018. We will also have a few demos showing how to deploy to App Service with Tomcat and Java SE.

Please drop by the Azure Jenkins booth, see a demo, or chat with us about how you are integrating Jenkins with Azure. We are always looking for feedback and to hear more about your build systems.


Programmatically onboard and manage your subscriptions in Azure Security Center

$
0
0

This post was co-authored by Tiander Turpijn, Senior Program Manager.

Securing your Azure workloads has become easier with the release of Azure Security Center (ASC) official PowerShell Module!

Many organizations are looking to automate more tasks, as manual work is prone to human error and creates a potential for duplicative work. The need for automation is especially prevalent when it comes to large scale deployments that involve dozens of subscriptions with hundreds and thousands of resources – all of which must be secured from the beginning.

To streamline the security aspects of the DevOps lifecycle, ASC has recently released its official PowerShell module. This enables organizations to programmatically automate onboarding and management of their Azure resources in ASC and adding the necessary security controls.

This blog will focus on using PowerShell to onboard ASC. Future blog posts will demonstrate how you can use PowerShell to automate the management of your resources in ASC.

In this example, we will enable Security Center on a subscription with ID: d07c0080-170c-4c24-861d-9c817742786c and apply the recommended settings that provide a high level of protection, by implementing the standard tier of Security Center, which provides advanced threat protection and detection capabilities:

  1. Set the ASC to standard. Learn more about what ASC has to offer in its two tiers: Free and Standard.
  2. Set the Log Analytics workspace to which the Microsoft Monitoring Agent will send data it collects on the VMs associated with the subscription (in our case, an existing user defined workspace, as myWorkspace). To learn more, read data collection in ASC.
  3. Activate Security Center’s automatic agent provisioning which deploys to Microsoft Monitoring Agent.
  4. Set the organization’s CISO as the security contact for ASC alerts and notable events.
  5. Assign Security Center’s default security policies.

Pre-requisites: these steps should be performed prior to running the Security Center cmdlets, to ensure your environment has all pre-requisites and dependencies installed:

  1. Run powershell as admin
  2. Install-Module -Name PowerShellGet -Force
  3. Set-ExecutionPolicy -ExecutionPolicy AllSigned
  4. Import-Module PowerShellGet
  5. Install-Module -Name AzureRM.profile -RequiredVersion 5.5.0
  6. Restart powershell
  7. Install-Module -Name AzureRM.Security -AllowPrerelease –Force

a. Register your subscriptions to the Security Center Resource Provider

    Set-AzureRmContext -Subscription "d07c0080-170c-4c24-861d-9c817742786c”
    Register-AzureRmResourceProvider -ProviderNamespace ‘Microsoft.Security’

      b. Set the coverage level (pricing tier) of the subscriptions (This is optional. If it’s not defined, the pricing tier will be free.)

        ​​Set-AzureRmContext -Subscription "d07c0080-170c-4c24-861d-9c817742786c”
        Set-AzureRmSecurityPricing -Name "default" -PricingTier "Standard"

          c. Configure the workspace to which the agents will report to (This is optional. If it’s not defined, the default workspace will be used.)

            Pre-requisite: Create a Log Analytics workspace to which the subscription’s VMs will report to. You can define multiple subscriptions to report to the same workspace.

            Set-AzureRmSecurityWorkspaceSetting -Name "default" -Scope "/subscriptions/d07c0080-170c-4c24-861d-9c817742786c" -WorkspaceId "/subscriptions/d07c0080-170c-4c24-861d-9c817742786c/resourceGroups/myRg/providers/Microsoft.OperationalInsights/workspaces/myWorkspace"

              d. Define automatic provisioning of the Microsoft Monitoring Agent on your Azure VMs (This is optional. If not automatic, the agent can be manually installed.)

                Set-AzureRmContext -Subscription "d07c0080-170c-4c24-861d-9c817742786c”
                Set-AzureRmSecurityAutoProvisioningSetting -Name "default" -EnableAutoProvision

                  e. Define security contact details (optional).

                    It is highly recommended you define the security contact details for the subscriptions you onboard, as these contacts will be used as the recipients of alerts and notifications generated by Security Center.

                    Set-AzureRmSecurityContact -Name "default1" -Email "CISO@my-org.com" -Phone "2142754038" -AlertsAdmin -NotifyOnAlert

                      f. Assign the default Security Center policy initiative

                        Register-AzureRmResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
                        $Policy = Get-AzureRmPolicySetDefinition -Name ' [Preview]: Enable Monitoring in Azure Security Center'
                        
                        New-AzureRmPolicyAssignment -Name 'ASC Default <d07c0080-170c-4c24-861d-9c817742786c>' -DisplayName 'Security Center Default <subscription ID>' -PolicySetDefinition $Policy -Scope ‘/subscriptions/d07c0080-170c-4c24-861d-9c817742786c’

                        You can now use the official PowerShell cmdlets with automation scripts to programmatically iterate on multiple subscriptions/resources, reducing the overhead caused by manually performing these actions, as well as reduce the potential risk of human error resulting from manual actions. For more information, refer to the ASC sample script.

                        To learn more about how you can use PowerShell to automate onboarding to Security Center, visit our documentation.

                        HDInsight tools for Visual Studio Code: simplifying cluster and Spark job configuration management

                        $
                        0
                        0

                        We are happy to announce that HDInsight Tools for Visual Studio Code (VS Code) now leverage VS Code built-in user settings and workspace settings to manage HDInsight clusters and Spark job submissions. With this feature, you can manage your linked clusters and set your preferred Azure environment with VS Code user settings. You can also set your default cluster and manage your job submission configurations via VS Code workspace settings.

                        HDInsight Tools for VS Code can access HDInsight clusters in Azure regions worldwide. To grant more flexible access to HDInsight clusters, you can  access the clusters through your Azure subscriptions, by linking to your HDInsight cluster using your Ambari username and password, or by connecting to an HDInsight Enterprise Security Package Cluster via the domain name and password. All Azure settings and linked HDInsight clusters are kept in VS Code user settings for your future use. The Spark job submission can support up to a hundred parameters to give you the flexibility to maximize cluster computing resources usage, and also allow you to specify the right parameters to optimize your Spark job performance. By leveraging the VS Code workspace setting, you have the flexibility to specify parameters in JSON format.

                        Summary of new features

                        • Leverage VS Code user settings to manage your cluster and environments.
                          • Set Azure Environment: Choose command HDInsight: Set Azure Environment. The specified Azure environment will be your default Azure environment for cluster navigation, data queries, and job submissions.
                          • Link a Cluster: Choose command HDInsight: Link a Cluster. The linked cluster information is saved in  user settings.
                        • Use the VS Code workspace setting to manage your PySpark job submission.
                          • Set Default Cluster:  Choose command HDInsight: Set Default Cluster. The specified cluster will be your default cluster for PySpark or Hive data queries and job submissions.
                          • Set Configurations:  Choose command HDInsight: Set Configurations to specify parameter values for your Spark job Livy configurations.

                        How to install or update

                        First, install Visual Studio Code and download Mono 4.2.x (for Linux and Mac). Then get the latest HDInsight Tools by going to the VSCode Extension repository or the VSCode Marketplace and searching HDInsight Tools for VSCode.

                        imageFor more information about HDInsight Tools for VSCode, please use the following resources:

                        Learn more about today’s announcements on the Big Data blog. Discover more on the Azure service updates page.

                        If you have questions, feedback, comments, or bug reports, please use the comments below or send a note to hdivstool@microsoft.com.

                        Run Ubuntu virtual machines made even easier with Hyper-V Quick Create

                        $
                        0
                        0

                        Today, we’ve made running Linux even easier on Windows 10. With the Hyper-V Quick Create feature added in the Windows 10 Fall Creators Update, we have partnered with Ubuntu and added a virtual machine image so in a few quick minutes, you’ll be up and developing. This is available now – just type “Hyper-V Quick Create” in your start menu!

                        The Hyper-V Quick Create in your start menu.

                        Please note, this feature does require Hyper-V. Please head over to the docs to learn more about Hyper-V and enabling it.

                        On top of running Ubuntu in a virtual machine, you can use Windows Subsystem for Linux. WSL is a Windows 10 feature that enables you to run native Linux command-line tools directly on Windows. WSL is an extremely easy to install feature on Windows 10, and you can run Ubuntu, Suse, Debian and other distros as well. And if you want to build your own distro and use that, you can too!

                        The post Run Ubuntu virtual machines made even easier with Hyper-V Quick Create appeared first on Windows Developer Blog.

                        Telstra empowers its employees to do their best work from anywhere with Microsoft Office 365

                        $
                        0
                        0

                        The Telstra logo.

                        Today’s post was written by Gregory Koteras, general manager of digital workplace solutions at Telstra in Melbourne, Australia.

                        Image of Gregory Koteras, general manager of digital workplace solutions at Telstra in Melbourne, Australia.At Telstra, our mission is to connect people. We’re Australia’s leading telecommunications and technology company, providing mobile phone and internet access to 17.6 million retail customers.

                        We’re currently fundamentally re-engineering how we operate through our new T22 strategy, designed to remove complexity and management layers, decrease the focus on hierarchical decision making, and increase the focus on empowered teams making decisions closer to the customer.

                        The strategy leverages the significant capabilities already being built through Telstra’s up to $3 billion strategic investment announced in August 2016 in creating the Networks for the Future and digitizing the business.

                        The key to any successful organizational change is having engaged and empowered people. One of the ways we’re doing this is by providing new tools and systems that our employees can use to connect across more than 20 countries around the world. This includes outfitting our employees and contractors with Microsoft Office 365 to provide state-of-the-art collaboration and conferencing tools needed to design better services and transform our customers’ experience.

                        We also know how important it is to give our people a voice, and we use Yammer to let all employees connect with each other, ask questions, and get the answers they need. Conversely, Telstra executives use Yammer to engage with our global staff and rally support for corporate initiatives. Yammer is our corporate living room. There are thousands of work-related conversations happening there, but also book club groups, fitness groups, Brilliant Connected Women groups, and technical interest groups.

                        We’re also proud to be a corporate leader in serving customers with disabilities and addressing barriers to accessibility and inclusion. And that extends to our people. With the built-in accessibility features in Office 365 ProPlus, such as screen reader support, voice alerts, and keyboard shortcuts, all Telstra employees can use these new tools to be part of company conversations.

                        In March 2014, Telstra adopted a flexible workstyle model called All Roles Flex, which recognizes the need for flexible hours and modes for different job roles. It includes part-time work, working outside normal nine-to-five business hours, and working from different locations. To support this way of working, our people need to have access to the best tools and services, so they can connect anywhere, anytime. Office 365 gives them the flexibility and functionality to do that.

                        As we focus on transforming our company, the tools we provide our people will play a critical role. By greatly simplifying our structure and ways of working, we empower our people and better serve our customers.

                        Read the case study to learn how Telstra is creating a simpler and productive workplace with Microsoft Office 365.

                        The post Telstra empowers its employees to do their best work from anywhere with Microsoft Office 365 appeared first on Microsoft 365 Blog.

                        The future of ASP.NET SignalR

                        $
                        0
                        0

                        In ASP.NET Core 2.1, we brought SignalR into the ASP.NET Core family. Many of our users have asked what this means for the previous version of SignalR: ASP.NET SignalR.

                        As a reminder, ASP.NET SignalR is represented by the NuGet package Microsoft.AspNet.SignalR and runs on applications using .NET Framework and System.Web. ASP.NET Core SignalR is part of the ASP.NET Core platform which runs on both .NET Core and .NET Framework and uses the NuGet package Microsoft.AspNetCore.App.

                        Support for the Azure SignalR Service

                        This year, we’re planning to release version 2.4.0 of ASP.NET SignalR. This version will contain bug fixes as always, but will also include one major new feature: Support for the Azure SignalR Service.

                        The Azure SignalR Service is a managed service that handles scaling for SignalR-based applications. In May, we released this service into public preview with support for ASP.NET Core SignalR, and we’re pleased to announce that support for ASP.NET SignalR is also coming to the Azure SignalR Service. We expect the first preview of this to be available in Fall 2018, along with a preview release of SignalR 2.4.0. In order to migrate your application to use the Azure SignalR service, you will need to update both the client and the server to ASP.NET SignalR 2.4.0.

                        We’re still in the early stages of work on this feature, so we don’t have specific examples yet. However, this support will be similar to how ASP.NET Core SignalR supports the Azure SignalR Service. With minimal modifications to your server application, you will be able to enable support for the service. Once you’re using the Azure SignalR Service, your server application no longer has to manage all of the individual connections. Moving to the service also means you no longer require a scale-out system (such as Redis, Service Bus or SQL Server), as the service handles scaling for you.

                        Also, as with ASP.NET Core SignalR, as long as your clients are using the latest version of the SignalR Client (2.4.0), they will be able to connect via the service without modification.

                        If you’re interested in working with the Azure SignalR Service to migrate to this service and provide feedback, please contact the team by email at asrs@microsoft.com.

                        Client supported frameworks

                        Another thing we are planning to do in 2.4.0 is simplify the supported frameworks for the SignalR .NET Client. Our plan for 2.4.0 is to move the client to support:

                        • .NET Standard 2.0 (which includes Xamarin, and the Universal Windows Platform)
                        • .NET Framework 4.5 and higher

                        This does mean that version 2.4.0 of the .NET client will no longer support Windows 8, Windows Phone, or Silverlight applications. We want some feedback on this though, so if you still have applications using the SignalR client that run on these platforms, let us know by commenting on the GitHub issue tracking this part of the work.

                        Handling the backlog of issues

                        While we didn’t forget about ASP.NET SignalR, we did let things get a little messy over there while we were building ASP.NET Core. If you look at the issue tracker you’ll see we have (at the time of publishing) over 500 open issues. We didn’t do a great job keeping on top of the backlog there. In order to get a handle on things, we’re going to have to declare a kind of “Issue Bankruptcy” to get back on top of the work.

                        So, in order to get back on top of the backlog, we’re going to close all issues that were opened prior to January 1st, 2018. This does not mean we’re not interested in fixing them, it just means they’ve gotten stale and we aren’t able to follow up on them. If one of these issues is affecting you, please feel free to open a new issue with the details and we will be happy to review it. There are a lot of issues in the tracker that are simply no longer relevant, or may have been addressed in a previous release.

                        Our priorities moving forward

                        With the release of ASP.NET Core SignalR, it’s necessary to talk about how the team is going to be prioritizing our work on the two variants of SignalR. Our plan moving forward is to shift our focus towards ASP.NET Core SignalR. This means that after the 2.4.0 release, we won’t be investing resources in new features for ASP.NET SignalR. However, this does not mean ASP.NET SignalR will be left unsupported. We will continue to respond to bug reports and fix critical or security-related issues. You should continue to feel confident using ASP.NET SignalR in your applications. Microsoft will also continue to provide product support services for ASP.NET SignalR.

                        Collaborating with customers and partners to deliver a modern desktop: Microsoft Managed Desktop

                        $
                        0
                        0

                        We have consistently heard from our customers—both large and small—that they struggle to keep up with the pace of changes in technology. They feel pulled between the requirement to stay secure and up to date against the need to drive more business value. They are challenged to deliver the great user experiences that employees want and expect. And the sophistication of today’s security threats requires organizations to re-think how they deploy, manage, and secure assets for their users.

                        The cloud has dramatically changed the way in which we can deliver, manage, and update devices, which creates an opportunity to think about how we deliver a modern desktop with Microsoft 365 in new and different ways.

                        Today, we are announcing Microsoft Managed Desktop (MMD), a new initial offering that brings together Microsoft 365 Enterprise, device as a service, and cloud-based device management by Microsoft. MMD enables customers to maximize their IT organizations’ focus on their business while Microsoft manages their modern desktops.

                        Great experience with Microsoft 365 on modern devices—Our goal with MMD is to provide a great experience for users while keeping devices secure and up to date. MMD relies on the power of Microsoft 365, running in a consistent, lightweight, reference architecture that continues to evolve to allow our customers to take full advantage of our intelligent security capabilities to protect them from nascent threats. Importantly, MMD is built on modern devices that meet our specification and runtime quality bar.

                        Analytics benefit all customers—Analytics are at the heart of MMD. We leverage analytics to provide operational and security insights and learnings, so we can constantly monitor and improve, as well as enable us to manage the global MMD device population. As an example, we use insights and AI to determine which devices are ready for feature updates or, conversely, whether a specific app is blocking a device’s ability to update so we can act.

                        Customer and partner insight and feedback—Customer feedback and insight are also at the heart of MMD. We have deployed MMD in a measured approach with a set of early customers, leading to hundreds of changes in Microsoft 365 to better enable end-to-end scenarios for customers around the world. We are delighted to be working in partnership with Lloyds Banking Group to deploy MMD, as well as the Seattle Reign FC. These organizations are united by their desire to transform, to modernize the user experience and shift to a modern desktop. They have been partnering with us to learn from, expand, and develop the MMD offering so that we can bring it to more customers and markets in the future. We are also partnering with key strategic partners like Dell, HP, DXC, HCL, Computacenter, and Accenture/Avanade in our MMD journey. We see great opportunities for our partner ecosystem to expand their existing Microsoft 365 activities and provide devices and experiences alongside MMD.

                        Today, we are live with MMD with a small number of customers in the U.K. and the U.S., and are starting operations in Canada, Australia, and New Zealand in early 2019. We will continue to learn from these initial customers and use that insight to evolve and improve both Microsoft 365 and MMD. From there we plan to expand to several other geographies in the second half of 2019.

                        We believe that MMD will be an option that allows organizations to fundamentally shift how they think about and manage their IT. Through MMD, customers will be able to move toward a secure, always up-to-date environment with device management by Microsoft. As we expand the offering, our partners will play a key role in helping us bring MMD to market and support customers in their transition to a modern desktop. We encourage customers who are interested in MMD to contact their local Microsoft account manager as we work to broaden the offering.

                        The post Collaborating with customers and partners to deliver a modern desktop: Microsoft Managed Desktop appeared first on Microsoft 365 Blog.

                        ASP.NET Core in Visual Studio for Mac – Help us build the best experience

                        $
                        0
                        0

                        We are working to improve the experience for ASP.NET Core developers in Visual Studio for Mac. If you are working on ASP.NET Core apps in Visual Studio for Mac, we would love to hear you feedback. Your feedback is important so that we can help shape the future of ASP.NET Core in Visual Studio for Mac.

                        At the end of the survey, you can leave your name and email address (optional), so that a member of the team can reach out to you to get more details. The survey should take less than 5 minutes to be completed.

                        Take the survey now

                        Thanks,
                        Sayed Ibrahim Hashimi
                        @SayedIHashimi


                        Announcing .NET Framework 4.8 Early Access build 3646

                        $
                        0
                        0

                        Today, we are happy to share an Early Access build for the .NET Framework 4.8. This includes an updated .NET 4.8 runtime as well as the .NET 4.8 Developer Pack (a a single package that bundles the .NET Framework 4.8 runtime, the .NET 4.8 Targeting Pack, and the .NET Framework 4.8 SDK).

                        Please help us ensure this is a high quality and compatible release by trying out this build and exploring the new features.

                        Next steps:
                        To explore the new features, download the .NET 4.8 Developer Pack build 3646. Instead, if you want to try just the .NET 4.8 runtime, you can download either of these:

                        Please provide your feedback by reporting an issue at the .NET Framework Early Access GitHub repository.

                        Note: this release is still under development, you can expect to see more features and fixes in future preview builds. Also, a reminder that this build is not supported for production use.

                        This preview build 3646 includes improvements/fixes in the following areas:

                        • [Runtime] JIT and NGEN improvements
                        • [Windows Forms] Accessibility enhancements
                        • [WPF] SelectionTextBrush Property
                        • [BCL] Updated ZLib

                        You can see the complete list of improvements in this build here.

                        .NET Framework build 3646 is also included in the next update for Windows 10. You can sign up for Windows Insiders to validate that your applications work great on the latest .NET Framework included in the latest Windows 10 releases.

                         

                        Runtime – JIT improvements

                        The JIT in .NET 4.8 is based on .NET Core 2.1.  All bug fixes and many code generation-based performance optimizations from .NET Core 2.1 are now available in the .NET Framework. 

                         

                        Runtime – NGEN improvements

                        NGEN images in the .NET Framework no longer contain writable & executable sections. This reduces the surface area available to attacks that attempt to execute arbitrary code by modifying memory that will be executed.

                        While there will still be writable & executable data in memory at runtime, this change removes those mapped from NGEN images, allowing them to run in restricted environments that don’t permit executable/writable sections in images. 

                         

                        Windows Forms – Accessibility Enhancements

                        In .NET Framework 4.8 WinForms is adding three new features to enable developers to write more accessible applications. The features added are intended to make communication of application data to visually impaired users more robust. We’ve added support for ToolTips when a user navigates via the keyboard, we’ve added LiveRegions and Notification Events to many commonly used controls.

                        To enable these features your application needs to have the following AppContextSwitches enabled in the App.config file:

                         

                        UIA LiveRegions Support in Labels and StatusStrips

                        UIA Live Regions allow application developers to notify screen readers of a text change on a control that is located apart from the location where the user is working. Examples of where this would come in handy could be a StatusStrip that shows a connection status. If the connection is dropped and the Status changes, the developer might want to notify the screen reader of this change. Windows Forms has implemented UIA LiveRegions for both the Label control and the StatusStrip control.

                        Example use of the LiveRegion in a Label Control:

                        Narrator will now announce “Ready” Regardless of where the user is interacting with the application.
                        You can also implement your UserControl as a Live region:

                         

                        UIA Notification Events

                        In Windows 10 Fall Creators Update Windows introduced a new method of having an application notify Narrator that content has changed, and Narrator should announce the change. The UIA Notification event provides a way for your app to raise a UIA event which leads to Narrator simply making an announcement based on text you supply with the event, without the need to have a corresponding control in the UI. In some scenarios, this could be a straightforward way to dramatically improve the accessibility of your app.  For more information about UIA Notification Events, see this blog post.

                        An example of where a Notification might come in handy is to notify the progress of some process that may take some time.

                        An example of raising the Notification event:

                         

                        ToolTips on keyboard access

                        Currently a control tooltip can only be triggered to pop up by moving a mouse pointer into the control. This new feature enables a keyboard user to trigger a control’s tooltip by focusing the control using a Tab key or arrow keys with or without modifier keys. This particular accessibility enhancement requires an additional AppContextSwitch as seen in the following example:

                        1. Create a new WinForms application
                        2. Add the following XML to the App.config file

                        3. Add several buttons and a ToolTip control to the application’s form.

                        4. Set tooltips for the buttons.

                        5. Run the application and navigate between the buttons using a keyboard:

                        DataGridView control accessible hierarchy changes

                        Currently the accessible hierarchy (UI Automation tree) shows the editing box tree element as a child of currently edited cell but not as a root child element of DataGridView. The hierarchy tree update can be observed using Inspect tool:

                         

                         

                        WPF – SelectionTextBrush Property for use with Non-Adorner Based Text Selection

                        In the .NET Framework 4.7.2 WPF added the ability to draw TextBox and PasswordBox text selection without using the adorner layer (See Here). The foreground color of the selected text in this scenario was dictated by SystemColors.HighlightTextBrush.

                        In the .NET Framework 4.8 we are adding a new property, SelectionTextBrush, that allows developers to select the specific brush for the selected text when using non-adorner based text selection.

                        This property works only on TextBoxBase derived controls and PasswordBox in WPF applications with non-adorner based text selection enabled. It does not work on RichTextBox. If non-adorner based text selection is not enabled, this property is ignored.

                        To use this property, simply add it to your XAML code and use the appropriate brush or binding.

                        The resulting text selection will look like this:

                        You can combine the use of SelectionBrush and SelectionTextBrush to generate any color combination of background and foreground that you deem appropriate.

                         

                        BCL – Updated ZLib

                        Starting with .NET Framework 4.5 we used the native version of ZLib (a native external compression library used for data compression) from http://zlib.net in clrcompression.dll in order to provide an implementation for the deflate algorithm. In .NET Framework 4.8 we updated clrcompression.dll to use version 1.2.11 which includes several key improvements and fixes.

                         

                        Closing

                        Try out these new features in .NET Framework 4.8 early access build 3646 and share your feedback by reporting an issue at the .NET Framework Early Access GitHub repository.

                        Team Foundation Server 2018 Update 3 and Update 1.1 are available

                        $
                        0
                        0
                        Last week, we released both TFS 2018 Update 3 and TFS 2018 Update 1.1. Here are the key links: TFS 2018.3 Release Notes TFS 2018.3 Web Installer TFS 2018.3 ISO TFS 2018.3 Express Web Installer TFS 2018.3 Express ISO TFS 2018.1 Release Notes TFS 2018.1.1 Web Installer TFS 2018.1.1 ISO TFS 2018.1.1 Express Web Installer... Read More

                        Exploring Clang Tooling, Part 0: Building Your Code with Clang

                        $
                        0
                        0

                        This post is part of a regular series of posts where the C++ product team and other guests answer questions we have received from customers. The questions can be about anything C++ related: MSVC toolset, the standard language and library, the C++ standards committee, isocpp.org, CppCon, etc.

                        Today’s post is by guest author Stephen Kelly, who is a developer at Havok, a contributor to Qt and CMake and a blogger. This is the first post in a series where he is sharing his experience using Clang tooling in his current team.

                        Conformance and Compatibility

                        During the long development of C++ compilers so far, a few compilers have dominated in mainstream domains. MSVC 6 and GCC 2.95 have sometimes been described as ‘too successful’. Their success has produced lasting effect of driving C++ adoption, but they had many incompatibilities with each other, resulting in beautiful walled gardens. In some cases (such as omitting the typename keyword inside templates) this made development tasks more convenient, even if the resulting code was divergent from the C++ standard or from GCC. For developers working on code intended to be portable between different platforms, this has been a lasting annoyance – colleagues would check-in code without the required typename keyword, causing other colleagues who use a more conforming compiler to repair the code.

                        On Unix-like platforms where GCC dominated, standards conformance has held a higher status in part due to Free Software culture of many compatible tools (and people!) which can collaborate in the venue of the standard. Clang, a more recent entry into the field of C++ compilers, shared that aim of standards conformance but gained marketshare for several reasons, among them licence choice, implementation language choice, cross-compilation, improved diagnostic messages etc. Such competition has benefited both GCC and Clang as they match each other in terms of compliance and developer utility. Part of the strategy employed by Clang was to implement compatibility with GCC in terms of behavior, GCC bugs which are relied upon in standard Unix headers, and implementing a ‘compiler driver’ which is compatible on the command line with GCC in terms of warning flags and other compile options.

                        MSVC compiler has not been left behind on any front and is implementing and driving standards conformance for developers who value portability. The /permissive- option is standard conformant modulo bugs. Those remaining bugs will be resolved as releases continue.

                        Another development in the last several years is the emergence of tooling APIs for C++ based on Clang. Clang developers have created tooling which can be used to mechanically refactor large amounts of C++ code, including clang-tidy and clang-format. Custom tools based on clang-tidy in particular is the subject of the follow-up posts in this blog series.

                        Acquiring the Clang/LLVM Tools

                        Together with the use of Clang as a viable compiler for production use on Windows for multiple web browsers, all of this leaves the question of how you can benefit from Clang tooling. If your codebase has only ever been built with the MSVC compiler, the code must first be made buildable with Clang.

                        Installers of Clang for Windows are available here. One of the ways Clang has been able to repeat its success on Windows is to implement compatibility with MSVC. The Clang installer for Windows includes two ‘compiler drivers’. clang++ is GCC compatible even on Windows and may be used with a codebase which relies on MinGW. clang-cl is the second compiler driver shipped with the Clang installer and is compatible with the MSVC compiler driver. This compatibility appears in terms of accepting command line flags in the style of cl.exe and in terms of running Clang in a permissive mode in line with cl.exe.

                        After running the Clang installer, a toolset file is required to instruct Visual Studio 2017 to use clang-cl.exe instead of the native cl.exe. The ‘LLVM Compiler Toolchain’ extension for Visual Studio 2017 must be installed to enable the toolchain.

                        After installing the ‘LLVM Compiler Toolchain’ the platform toolset can be changed to llvm in Visual Studio, or by specifying it in your buildsystem generator, such as CMake with cmake .. -T llvm.

                        Using MSVC compiler’s /permissive- flag

                        Some of the C++ conformance issues detected by Clang are also detected by recent MSVC releases with the /permissive- flag. So, a first step to getting code to build with Clang may be to first build it with MSVC Conformance mode. The downside of this is that MSVC Conformance mode is more strict than Clang in some cases (because Clang attempts to emulate permissive MSVC). Certain MSVC behaviors such as incorrect two-phase-lookup is allowed by Clang-CL by default and rejected by MSVC Conformance mode.

                        Iterative Conformance

                        A more conforming mode of Clang-CL can be activated by adding the compile flags -fno-delayed-template-parsing -Werror=microsoft -Werror=typename-missing. Even after turning Microsoft diagnostics into errors, individual such diagnostics can be disabled if required by adding -Wno- versions of the documented flag such as -Wno-microsoft-sealed. Note that such a flag must appear after the -Werror=microsoft option.

                        Even with the compatibility that Clang-CL provides, a fallback option can be used to instruct the compiler to compile with CL.exe if required.

                        Several features of Clang may need to be enabled in the buildsystem to build the code. Use of intrinsics such as _mm_shuffle_epi8 requires the use of the -msse4.1 flag or similar.

                        As with enabling compiler warning on a codebase which has never used them before, the most sensible approach is to start building with Clang using the most permissive settings necessary, and then introduce more conformance over time.

                        If your interest in Clang is limited to making use of semantically-rich tooling, it is important to remember that your code does not need to run after it is compiled. It also does not need to link, or even to compile – judicious use of ifdefs can be used to make most of your code reachable to Clang tooling while limiting the effect on code which is too affected to compile, or on code you don’t control. Some parts of the Windows headers do not compile with Clang yet. That is likely to affect your code too. Certain efforts within Microsoft are addressing these issues in shipped headers.

                        Porting existing C++ code

                        Here are some issues that may occur when porting your code to build with Clang or /permissive-, as you increase the level of standard conformance in your build:

                        Only one user-defined conversion may be invoked implicitly
                        MSVC in permissive mode accepts C++ code which invokes two implicit conversions at once (instead of the standard-conforming one). Clang-CL does not accept such double-conversions. This can arise when converting between two distinct string types for example (implicitly to, then from const char*).
                        Both result statements in a ternary expression must have the same type
                        Where ternaries are used with two different result types, it will be necessary to ensure that both result types are the same without implicit conversion. This can occur with simple wrapper types, or more complex expressions, such as when using a smart pointer which converts implicitly to a pointer type:
                        smart_pointer<int> func(bool b)
                        {
                            int* defaultPtr = nullptr;
                            smart_pointer<int> sp;
                            return b ? sp : defaultPtr;
                        }
                        
                        Missing `typename` and `template` keywords
                        C++ requires the user to use the typename keyword in certain template contexts in order to disambiguate between types and values in permissive mode and requires the template keyword to disambiguate between template functions and comparisons.

                        In the case of variables within templates, the solution is usually to use auto instead of adding the template keyword.
                        This can also occur when using type traits such as std::remove_reference. Developers might write (or copy from elsewhere in your codebase), code such as

                        template<typename T>
                        void doSomething(T t)
                        {
                            std::remove_reference<T>::type value = input;
                            ++value;
                            return value;
                        }
                        

                        and Clang rightly issues a diagnostic and recommends use of the typename keyword.

                        However, at this point it is obvious that developers are not going to remember to add such keywords unless they are reminded of it, so perhaps a different strategy of teaching developers to use std::remove_reference_t instead, and omit the trailing ::type. It is simpler all-round and more portable. Similar transformations can be introduced for any custom type traits used in your code.

                        Excessive typename keyword
                        Similarly, sometimes MSVC accepts a typename keyword where it should not.

                        Unfortunately, there are opposite cases where Clang requires a template keyword where it should not, so getting this right can at times require an #ifdef.

                        Static variables defined inside if statement
                        MSVC incorrectly accepts code such as
                        if (static bool oneTimeInit = true)
                        {
                        }
                        

                        In a modern codebase, this should be changed to

                        if (static bool oneTimeInit = true; oneTimeInit)
                        {
                        }
                        

                        This requires the use of the /std:c++17 flag when compiling with MSVC.

                        Implicit deletion of defaulted constructor
                        Clang does not allow user-defined but defaulted constructors where they are required to initialize a union.

                        The solution here is to actually define the constructor instead of defaulting it:

                        B::B()
                        {        
                        }
                        
                        Clang does not accept the for each extension
                        The solution here is to use cxx_range_for instead. Replace
                        for each (auto item in container)
                        

                        With

                        for (auto item : container)
                        
                        Qualify lookup in template-dependent base
                        MSVC incorrectly accepts (and disambiguates) use of declarations from template-dependent bases, though Clang does not. This is again due to lax implementation of two-phase lookup. The solution here is to prefix such calls with this-> or the name of the base class.
                        Always-false static asserts
                        static_assert(false) is sometimes attempted by developers who wish to issue an informative error message if there is an attempt to instantiate a template which should not be instantiated. Unfortunately it doesn’t work with two phase lookup. This is accepted by MSVC, but not by Clang. The solution is to make the value dependent on the template type.
                        Specialization in different scope to declaration
                        MSVC allows specialization of a C++ template in different a namespace to the one it was declared in. Clang does not allow this. The specialization should be in the same namespace as the initial template.
                        template<typename T>
                        struct Templ
                        {
                        };
                        
                        namespace NS {
                        
                        template<>
                        struct Templ<int>
                        // error: class template specialization of 'Templ' must occur at global scope
                        {
                        };
                        
                        }
                        
                        

                        Conclusion

                        It is important to realize that being able to build code with Clang is useful even if you can not run it (due to #ifdefs or dependency issues). Running Clang-built code opens up the possibility of using Clang sanitizers for example, but just being able to compile the code with Clang enables use of source-transformation tools such as clang-tidy, clazy and clang-format. Further blog posts in this series will explore workflows for source-to-source transformation with Clang.

                        Please leave a comment if you encountered other changes you needed to make in your code to compile with Clang-CL!

                        Anonymous URL Submission Tool Being Retired

                        $
                        0
                        0

                        Saying Goodbye is never easy, but the time has come to announce the withdrawal of anonymous non-signed in support Bing's URL submission tool. Webmaster will still be able to log in and access Submit URL tool in Bing Webmaster Tools, and this is easier than ever as the tool now supports Google and Facebook authentication in addition to existing Microsoft accounts.

                        Why say goodbye?

                        Well, the URLs received are by far too low quality to be trustable, and webmasters preferring having more ownership of the URLs for their site.

                        In order to use the tool, webmasters just need to login, add and verify their site. Then navigate to the Submit URL tool within the Configure My Site menu options.

                        In case the webmasters want to use our Bing Webmaster tools API, webmasters have to generate an API key through Bing Webmaster Tools and follow the guidelines for its usage here. In case you haven't signed up on the tool yet, please click here to sign up.

                        Thank you,
                        The Bing Webmaster Tools Team

                        Immutable storage for Azure Storage Blobs now generally available

                        $
                        0
                        0

                        Financial Services organizations regulated by the Securities and Exchange Commission (SEC), Commodity Futures Trading Commission (CFTC), Financial Industry Regulatory Authority (FINRA), Investment Industry Regulatory Organization of Canada (IIROC), Financial Conduct Authority (FCA), and more are required to retain business-related communications in a Write-Once-Read-Many (WORM) or immutable state that ensures they are non-erasable and non-modifiable for a specific retention interval. The immutable storage requirement is not limited to financial organizations but also applies to industries such as healthcare, insurance, media, public safety, and legal services.

                        Today, we are excited to reveal the general availability of immutable storage for Azure Storage Blobs to address this requirement. The feature is available in all Azure public regions. Through configurable policies, users can keep Azure Blob storage data in an immutable state where Blobs can be created and read, but not modified or deleted.

                        Typical applications include:

                        • Regulatory compliance: Immutable storage for Azure Blobs is designed to help financial institutions and related industries address SEC 17a-4(f), CFTC 1.31©-(d), FINRA etc. A technical whitepaper with details on how the feature addresses these regulatory requirements is downloadable now via the Service Trust Portal. The Azure Trust Center contains detailed information about our compliance certifications.
                        • Secure document retention: Users receive maximum data protection as the immutable storage feature for Azure Blobs service ensures that data cannot be modified or deleted by any user including those with account administrative privileges.
                        • Legal hold: Immutable storage for Azure Storage Blobs enables users to store sensitive information critical to a litigation, criminal investigation, and more in a tamper-proof state for the desired duration.

                        Immutable storage for Azure Storage Blobs enables:

                        • Time-based retention policy support: Users set policies to store data immutably for a specified interval of time.
                        • Legal hold policy support: When the retention interval is not known, users can set legal holds to store data immutably until the legal hold is cleared.
                        • Support for all Blob tiers: WORM policies are independent of the Azure Blob Storage tier and will apply to all the tiers, hot, cool and archive. This allows customers to store the data in the most cost-optimized tier for their workloads while maintaining the data immutability.
                        • Blob Container level configuration: Immutable storage for Azure Storage Blobs allows users to configure time-based retention policies and legal hold tags at the container level. Users can create time-based retention policies, lock policies, extend retention intervals, set legal holds, clear legal holds etc. through simple container level settings. The policies apply to all the Blobs in the container, both existing and new Blobs.

                        Immutable data is priced in the same way as mutable data and there is no additional charge for using this feature. Please refer to the Azure Storage Pricing page for the related pricing details.

                        How to get started

                        To use this feature, you must create a GPv2 account through the Azure Resource Manager. For more details on how to enable this feature, please refer to the immutable storage for Azure Storage Blobs documentation.

                        Immutable Storage for Azure Storage Blobs is supported in the Azure Portal, the .net Client Library (version 7.2.0-preview and later) the node.js Client Library (version 4.0.0 and later), the Python Client Library (version 2.0.0 and later) and the Java Client Library. Preview support is available in CLI 2.0, and PowerShell (version 4.4.0-preview) with production support coming very soon.

                        You can also directly use the Storage Services REST API. This feature is supported on Blob Service REST API version 2017-11-09 and later and on Azure Storage Resource Provider REST API version 2018-02-01 and later. In general, we always recommend using the latest versions regardless of whether you are using the feature or not.

                        Partner integration

                        We integrate with a broad ecosystem of partners to jointly deliver solutions to our customers. The following partners support Immutable storage for Azure Storage Blobs:

                        17a-4, LLC is a compliance technology and consulting company focused on the retention of electronic compliance records. DataParser is 17a-4’s widely adopted software solution to bring regulated data into compliance archives and can be used to collect, format and deliver records to Azure Blob immutable storage. “We think many of our clients will take advantage of the Azure Storage tiers - hot, cool and archive - to keep regulated records in WORM compliance in a cost-effective and efficient manner. Our DataParser can be a helpful tool in this process, collecting various data sources for delivery to Azure Blob storage,” said Douglas Weeden, Director of Compliance, 17a-4, LLC.

                        In keeping the industry lead in supporting Azure, Commvault is excited to announce our integration with Immutable Storage for Azure Blobs. Financial institutions and others with highly sensitive data that needs to be retained in a non-erasable and non-rewritable state can rely on Commvault with this new support for immutable data on Azure Blob Storage. This is vital to an organization’s ability to meet stringent regulatory requirements like SEC Rule 17a-4(f), FINRA Rule 4511(c), and the principles-based requirements of CFTC Rule 1.31(c)-(d).

                        HubStor is a storage software company that unlocks the power of the cloud for intelligent data management. Enterprises use HubStor to manage and protect their mission-critical unstructured data. HubStor’s integration with Azure Immutable Blob Storage offers a convenient approach for regulated organizations to satisfy compliance retention requirements in the cloud for workloads such as email, voice, fiscal records, logs, and medical images. Today, HubStor is used by broker-dealer firms, hedge fund managers, mortgage lenders, life sciences companies, medical device manufacturers, and State and Local Government agencies to deliver immutable data protection for various legal and regulatory requirements. Learn more about HubStor’s integration announcement.

                        Archive2Azure, the intelligent data management and compliance archiving solution, provides customers with a native Azure archiving application for their structured, semi-structured, and unstructured data. Archive2Azure enables companies to provide automated retention, indexing on demand, encryption, search, review, and production for long-term archiving of their compliance, active, low-touch, and inactive data from within their own Azure tenancy. The pairing of the Azure Cloud with Archive2Azure's archiving and data management capabilities provide companies with the low-cost cloud-based security and information management they have long sought. With the general availability of Azure's much anticipated Immutable Blob Storage offering, the needed immutability, security, and lower cost to archive and manage regulated data for extended periods are now possible. With the availability of the new Immutable Blob Storage, Archive2Azure can now offer Azure’s full range of storage tiers providing users a wide choice of storage performance, cost, and regulatory compliance.

                        Feedback

                        We’re confident that immutable storage for Azure Storage Blobs will provide another critical element for optimizing your organization’s cloud data storage and compliance strategy. We look forward to hearing your feedback on this feature, please email us at AzureStorageFeedback@microsoft.com.

                        Windows 10 SDK Preview Build 17758 available now!

                        $
                        0
                        0

                        Today, we released a new Windows 10 Preview Build of the SDK to be used in conjunction with Windows 10 Insider Preview (Build 17758 or greater). The Preview SDK Build 17758 contains bug fixes and under development changes to the API surface area.

                        The Preview SDK can be downloaded from the developer section on Windows Insider.

                        For feedback and updates to the known issues, please see the developer forum. For new developer feature requests, head over to our Windows Platform UserVoice.

                        Things to note:

                        • This build works in conjunction with previously released SDKs and Visual Studio 2017. You can install this SDK and still also continue to submit your apps that target Windows 10 build 1803 or earlier to the store.
                        • The Windows SDK will now formally only be supported by Visual Studio 2017 and greater. You can download the Visual Studio 2017 here.
                        • This build of the Windows SDK will install on Windows 10 Insider Preview builds and supported Windows operating systems.
                        • In order to assist with script access to the SDK, the ISO will also be able to be accessed through the following URL:  https://go.microsoft.com/fwlink/?prd=11966&pver=1.0&plcid=0x409&clcid=0x409&ar=Flight&sar=Sdsurl&o1=17758 once the static URL is published.

                        C++/WinRT Update for build 17709 and beyond:

                        This update introduces many improvements and fixes for C++/WinRT. Notably, it introduces the ability to build C++/WinRT without any dependency on the Windows SDK. This isn’t particularly interesting to the OS developer, but even in the OS repo it provides benefits because it does not itself include any Windows headers. Thus, a developer will typically pull in fewer or no dependencies inadvertently. This also means a dramatic reduction in the number of macros that a C++/WinRT developer must guard against. Removing the dependency on the Windows headers means that C++/WinRT is more portable and standards compliant and furthers our efforts to make it a cross-compiler and cross-platform library. It also means that the C++/WinRT headers will never be mangled by macros. If you previously relied on C++/WinRT to include various Windows headers that you will now have to include them yourself. It has always been good practice to always include any headers you depend on explicitly and not rely on another library to include them for you.

                        Highlights

                        Support get_strong and get_weak to create delegates: This update allows a developer to use either get_strong or get_weak instead of a raw this pointer when creating a delegate pointing to a member function.

                        Add async cancellation callback: The most frequently requested feature for C++/WinRT’s coroutine support has been the addition of a cancellation callback.

                        Simplify the use of APIs expecting IBuffer parameters: Although most APIs prefer collections or arrays, enough APIs rely on IBuffer that it should be easier to use such APIs from C++. This update provides direct access to the data behind an IBuffer implementation using the same data naming convention used by the C++ standard library containers. This also avoids colliding with metadata names that conventionally begin with an uppercase letter.

                        Conformance: Improved support for Clang and Visual C++’s stricter conformance modes.

                        Improved code gen: Various improvements to reduce code size, improve inlining, and optimize factory caching.

                        Remove unnecessary recursion: When the command line refers to a folder rather than a specific winmd, cppwinrt will no longer search recursively for winmd files. It causes performance problems in the OS build and can lead to usage errors that are hard to diagnose when developers inadvertently cause cppwinrt to consume more winmds than expected. The cppwinrt compiler also now handles duplicates more intelligently, making it more resilient to user error and poorly-formed winmd files.

                        Declare both WINRT_CanUnloadNow and WINRT_GetActivationFactory in base.h: Callers don’t need to declare them directly. Their signatures have also changed, amounting to a breaking change. The declarations alleviate most of the pain of this change. The change is necessitated by the fact that C++/WinRT no longer depends on the Windows headers and this change removes the dependency on the types from the Windows headers.

                        Harden smart pointers: The event revokers didn’t revoke when move-assigned a new value. This lead me to take a closer look at the smart pointer classes and I noticed that they were not reliably handling self-assignment. This is rooted in the com_ptr class template that most of the others rely on. I fixed com_ptr and updated the event revokers to handle move semantics correctly to ensure that they revoke upon assignment. The handle class template has also been hardened by the removal of the implicit constructor that made it easy to write incorrect code. This also turned bugs in the OS into compiler errors fixed in this PR.

                        Breaking Changes

                        Support for non-WinRT interfaces is disabled by default. To enable, simply #include <unknwn.h> before any C++/WinRT headers.

                        winrt::get_abi(winrt::hstring) now returns void* instead of HSTRING. Code requiring the HSTRING ABI can simply use a static_cast.

                        winrt::put_abi(winrt::hstring) returns void** instead of HSTRING*. Code requiring the HSTRING ABI can simply use a reinterpret_cast.

                        HRESULT is now projected as winrt::hresult. Code requiring an HRESULT can simply static_cast if you need to do type checking or support type traits, but it is otherwise convertible as long as <unknwn.h> is included first.

                        GUID is now projected as winrt::guid. Code implementing APIs with GUID parameters must use winrt::guid instead, but it is otherwise convertible as long as <unknwn.h> is included first.

                        The signatures of WINRT_CanUnloadNow and WINRT_GetActivationFactory has changed. Code must not declare these functions at all and instead include winrt/base.h to include their declarations.

                        The winrt::handle constructor is now explicit. Code assigning a raw handle value must call the attach method instead.

                        winrt::clock::from_FILETIME has been deprecated. Code should use winrt::clock::from_file_time instead.

                        What’s New:

                        MSIX Support

                        It’s finally here! You can now package your applications as MSIX! These applications can be installed and run on any device with 17682 build or later.

                        To package your application with MSIX, use the MakeAppx tool. To install the application – just click on the MSIX file. To understand more about MSIX, watch this introductory video: link

                        Feedback and comments are welcome on our MSIX community: http://aka.ms/MSIXCommunity

                        MSIX is not currently supported by the App Certification Kit nor the Microsoft Store at this time.

                        MC.EXE

                        We’ve made some important changes to the C/C++ ETW code generation of mc.exe (Message Compiler):

                        The “-mof” parameter is deprecated. This parameter instructs MC.exe to generate ETW code that is compatible with Windows XP and earlier. Support for the “-mof” parameter will be removed in a future version of mc.exe.

                        As long as the “-mof” parameter is not used, the generated C/C++ header is now compatible with both kernel-mode and user-mode, regardless of whether “-km” or “-um” was specified on the command line. The header will use the _ETW_KM_ macro to automatically determine whether it is being compiled for kernel-mode or user-mode and will call the appropriate ETW APIs for each mode.

                        • The only remaining difference between “-km” and “-um” is that the EventWrite[EventName] macros generated with “-km” have an Activity ID parameter while the EventWrite[EventName] macros generated with “-um” do not have an Activity ID parameter.

                        The EventWrite[EventName] macros now default to calling EventWriteTransfer (user mode) or EtwWriteTransfer (kernel mode). Previously, the EventWrite[EventName] macros defaulted to calling EventWrite (user mode) or EtwWrite (kernel mode).

                        The generated header now supports several customization macros. For example, you can set the MCGEN_EVENTWRITETRANSFER macro if you need the generated macros to call something other than EventWriteTransfer.

                        • The manifest supports new attributes.
                        • Event “name”: non-localized event name.
                        • Event “attributes”: additional key-value metadata for an event such as filename, line number, component name, function name.
                        • Event “tags”: 28-bit value with user-defined semantics (per-event).
                        • Field “tags”: 28-bit value with user-defined semantics (per-field – can be applied to “data” or “struct” elements).
                        • You can now define “provider traits” in the manifest (e.g. provider group). If provider traits are used in the manifest, the EventRegister[ProviderName] macro will automatically register them.
                        • MC will now report an error if a localized message file is missing a string. (Previously MC would silently generate a corrupt message resource.)
                        • MC can now generate Unicode (utf-8 or utf-16) output with the “-cp utf-8” or “-cp utf-16” parameters.

                        Known Issues:

                        The SDK headers are generated with types in the “ABI” namespace. This is done to avoid conflicts with C++/CX and C++/WinRT clients that need to consume types directly at the ABI layer[1]. By default, types emitted by MIDL are *not* put in the ABI namespace, however this has the potential to introduce conflicts from teams attempting to consume ABI types from Windows WinRT MIDL generated headers and non-Windows WinRT MIDL generated headers (this is especially challenging if the non-Windows header references Windows types).

                        To ensure that developers have a consistent view of the WinRT API surface, validation has been added to the generated headers to ensure that the ABI prefix is consistent between the Windows headers and user generated headers. If you encounter an error like:

                        5>c:program files (x86)windows kits10include10.0.17687.0winrtwindows.foundation.h(83): error C2220: warning treated as error – no ‘object’ file generated

                        5>c:program files (x86)windows kits10include10.0.17687.0winrtwindows.foundation.h(83): warning C4005: ‘CHECK_NS_PREFIX_STATE’: macro redefinition

                        5>g:<PATH TO YOUR HEADER HERE>(41): note: see previous definition of ‘CHECK_NS_PREFIX_STATE’

                        It means that some of your MIDL generated headers are inconsistent with the system generated headers.

                        There are two ways to fix this:

                        • Preferred: Compile your IDL file with the /ns_prefix MIDL command line switch. This will cause all your types to be moved to the ABI namespace consistent with the Windows headers. This may require code changes in your code however.
                        • Alternate: Add #define DISABLE_NS_PREFIX_CHECKS before including the Windows headers. This will suppress the validation.

                        API Updates, Additions and Removals

                        When targeting new APIs, consider writing your app to be adaptive in order to run correctly on the widest number of Windows 10 devices. Please see Dynamically detecting features with API contracts for more information.

                        The following APIs have been added to the platform since the release of 17134. The APIs listed below have been removed.

                        In addition, please note the following removal since build 17744:

                        
                        namespace Windows.ApplicationModel.DataTransfer
                        { public sealed class DataPackagePropertySetView : IIterable&lt;IKeyValuePair&lt;string, object&gt;&gt;, IMapView&lt;string, object&gt; {
                        string SourceDisplayName { get; } } }
                        
                        

                        Additions

                        
                        namespace Windows.AI.MachineLearning {
                          public interface ILearningModelFeatureDescriptor
                          public interface ILearningModelFeatureValue
                          public interface ILearningModelOperatorProvider
                          public sealed class ImageFeatureDescriptor : ILearningModelFeatureDescriptor
                          public sealed class ImageFeatureValue : ILearningModelFeatureValue
                          public interface ITensor : ILearningModelFeatureValue
                          public sealed class LearningModel : IClosable
                          public sealed class LearningModelBinding : IIterable&lt;IKeyValuePair&lt;string, object&gt;&gt;, IMapView&lt;string, object&gt;
                          public sealed class LearningModelDevice
                          public enum LearningModelDeviceKind
                          public sealed class LearningModelEvaluationResult
                          public enum LearningModelFeatureKind
                          public sealed class LearningModelSession : IClosable
                          public struct MachineLearningContract
                          public sealed class MapFeatureDescriptor : ILearningModelFeatureDescriptor
                          public sealed class SequenceFeatureDescriptor : ILearningModelFeatureDescriptor
                          public sealed class TensorBoolean : ILearningModelFeatureValue, ITensor
                          public sealed class TensorDouble : ILearningModelFeatureValue, ITensor
                          public sealed class TensorFeatureDescriptor : ILearningModelFeatureDescriptor
                          public sealed class TensorFloat : ILearningModelFeatureValue, ITensor
                          public sealed class TensorFloat16Bit : ILearningModelFeatureValue, ITensor
                          public sealed class TensorInt16Bit : ILearningModelFeatureValue, ITensor
                          public sealed class TensorInt32Bit : ILearningModelFeatureValue, ITensor
                          public sealed class TensorInt64Bit : ILearningModelFeatureValue, ITensor
                          public sealed class TensorInt8Bit : ILearningModelFeatureValue, ITensor
                          public enum TensorKind
                          public sealed class TensorString : ILearningModelFeatureValue, ITensor
                          public sealed class TensorUInt16Bit : ILearningModelFeatureValue, ITensor
                          public sealed class TensorUInt32Bit : ILearningModelFeatureValue, ITensor
                          public sealed class TensorUInt64Bit : ILearningModelFeatureValue, ITensor
                          public sealed class TensorUInt8Bit : ILearningModelFeatureValue, ITensor
                        }
                        namespace Windows.ApplicationModel {
                          public sealed class AppInstallerInfo
                          public sealed class LimitedAccessFeatureRequestResult
                          public static class LimitedAccessFeatures
                          public enum LimitedAccessFeatureStatus
                          public sealed class Package {
                            IAsyncOperation&lt;PackageUpdateAvailabilityResult&gt; CheckUpdateAvailabilityAsync();
                            AppInstallerInfo GetAppInstallerInfo();
                          }
                          public enum PackageUpdateAvailability
                          public sealed class PackageUpdateAvailabilityResult
                        }
                        namespace Windows.ApplicationModel.Calls {
                          public sealed class VoipCallCoordinator {
                            IAsyncOperation&lt;VoipPhoneCallResourceReservationStatus&gt; ReserveCallResourcesAsync();
                          }
                        }
                        namespace Windows.ApplicationModel.Chat {
                          public static class ChatCapabilitiesManager {
                            public static IAsyncOperation&lt;ChatCapabilities&gt; GetCachedCapabilitiesAsync(string address, string transportId);
                            public static IAsyncOperation&lt;ChatCapabilities&gt; GetCapabilitiesFromNetworkAsync(string address, string transportId);
                          }
                          public static class RcsManager {
                            public static event EventHandler&lt;object&gt; TransportListChanged;
                          }
                        }
                        namespace Windows.ApplicationModel.DataTransfer {
                          public static class Clipboard {
                            public static event EventHandler&lt;ClipboardHistoryChangedEventArgs&gt; HistoryChanged;
                            public static event EventHandler&lt;object&gt; HistoryEnabledChanged;
                            public static event EventHandler&lt;object&gt; RoamingEnabledChanged;
                            public static bool ClearHistory();
                            public static bool DeleteItemFromHistory(ClipboardHistoryItem item);
                            public static IAsyncOperation&lt;ClipboardHistoryItemsResult&gt; GetHistoryItemsAsync();
                            public static bool IsHistoryEnabled();
                            public static bool IsRoamingEnabled();
                            public static bool SetContentWithOptions(DataPackage content, ClipboardContentOptions options);
                            public static SetHistoryItemAsContentStatus SetHistoryItemAsContent(ClipboardHistoryItem item);
                          }
                          public sealed class ClipboardContentOptions
                          public sealed class ClipboardHistoryChangedEventArgs
                          public sealed class ClipboardHistoryItem
                          public sealed class ClipboardHistoryItemsResult
                          public enum ClipboardHistoryItemsResultStatus
                          public sealed class DataPackagePropertySetView : IIterable&lt;IKeyValuePair&lt;string, object&gt;&gt;, IMapView&lt;string, object&gt; {
                            bool IsFromRoamingClipboard { get; }
                          }
                          public enum SetHistoryItemAsContentStatus
                        }
                        namespace Windows.ApplicationModel.Store.Preview {
                          public enum DeliveryOptimizationDownloadMode
                          public enum DeliveryOptimizationDownloadModeSource
                          public sealed class DeliveryOptimizationSettings
                          public static class StoreConfiguration {
                            public static bool IsPinToDesktopSupported();
                            public static bool IsPinToStartSupported();
                            public static bool IsPinToTaskbarSupported();
                            public static void PinToDesktop(string appPackageFamilyName);
                            public static void PinToDesktopForUser(User user, string appPackageFamilyName);
                          }
                        }
                        namespace Windows.ApplicationModel.Store.Preview.InstallControl {
                          public enum AppInstallationToastNotificationMode
                          public sealed class AppInstallItem {
                            AppInstallationToastNotificationMode CompletedInstallToastNotificationMode { get; set; }
                            AppInstallationToastNotificationMode InstallInProgressToastNotificationMode { get; set; }
                            bool PinToDesktopAfterInstall { get; set; }
                            bool PinToStartAfterInstall { get; set; }
                            bool PinToTaskbarAfterInstall { get; set; }
                          }
                          public sealed class AppInstallManager {
                            bool CanInstallForAllUsers { get; }
                          }
                          public sealed class AppInstallOptions {
                            string CampaignId { get; set; }
                            AppInstallationToastNotificationMode CompletedInstallToastNotificationMode { get; set; }
                            string ExtendedCampaignId { get; set; }
                            bool InstallForAllUsers { get; set; }
                            AppInstallationToastNotificationMode InstallInProgressToastNotificationMode { get; set; }
                            bool PinToDesktopAfterInstall { get; set; }
                            bool PinToStartAfterInstall { get; set; }
                            bool PinToTaskbarAfterInstall { get; set; }
                            bool StageButDoNotInstall { get; set; }
                          }
                          public sealed class AppUpdateOptions {
                            bool AutomaticallyDownloadAndInstallUpdateIfFound { get; set; }
                          }
                        }
                        namespace Windows.ApplicationModel.UserActivities {
                          public sealed class UserActivity {
                            bool IsRoamable { get; set; }
                          }
                        }
                        namespace Windows.Data.Text {
                          public sealed class TextPredictionGenerator {
                            CoreTextInputScope InputScope { get; set; }
                            IAsyncOperation&lt;IVectorView&lt;string&gt;&gt; GetCandidatesAsync(string input, uint maxCandidates, TextPredictionOptions predictionOptions, IIterable&lt;string&gt; previousStrings);
                            IAsyncOperation&lt;IVectorView&lt;string&gt;&gt; GetNextWordCandidatesAsync(uint maxCandidates, IIterable&lt;string&gt; previousStrings);
                          }
                          public enum TextPredictionOptions : uint
                        }
                        namespace Windows.Devices.Display.Core {
                          public sealed class DisplayAdapter
                          public enum DisplayBitsPerChannel : uint
                          public sealed class DisplayDevice
                          public enum DisplayDeviceCapability
                          public sealed class DisplayFence
                          public sealed class DisplayManager : IClosable
                          public sealed class DisplayManagerChangedEventArgs
                          public sealed class DisplayManagerDisabledEventArgs
                          public sealed class DisplayManagerEnabledEventArgs
                          public enum DisplayManagerOptions : uint
                          public sealed class DisplayManagerPathsFailedOrInvalidatedEventArgs
                          public enum DisplayManagerResult
                          public sealed class DisplayManagerResultWithState
                          public sealed class DisplayModeInfo
                          public enum DisplayModeQueryOptions : uint
                          public sealed class DisplayPath
                          public enum DisplayPathScaling
                          public enum DisplayPathStatus
                          public struct DisplayPresentationRate
                          public sealed class DisplayPrimaryDescription
                         public enum DisplayRotation
                          public sealed class DisplayScanout
                          public sealed class DisplaySource
                          public sealed class DisplayState
                          public enum DisplayStateApplyOptions : uint
                          public enum DisplayStateFunctionalizeOptions : uint
                          public sealed class DisplayStateOperationResult
                          public enum DisplayStateOperationStatus
                          public sealed class DisplaySurface
                          public sealed class DisplayTarget
                          public enum DisplayTargetPersistence
                          public sealed class DisplayTask
                          public sealed class DisplayTaskPool
                          public enum DisplayTaskSignalKind
                          public sealed class DisplayView
                          public sealed class DisplayWireFormat
                          public enum DisplayWireFormatColorSpace
                          public enum DisplayWireFormatEotf
                          public enum DisplayWireFormatHdrMetadata
                          public enum DisplayWireFormatPixelEncoding
                        }
                        namespace Windows.Devices.Enumeration {
                          public enum DeviceInformationKind {
                            DevicePanel = 8,
                          }
                          public sealed class DeviceInformationPairing {
                            public static bool TryRegisterForAllInboundPairingRequestsWithProtectionLevel(DevicePairingKinds pairingKindsSupported, DevicePairingProtectionLevel minProtectionLevel);
                          }
                        }
                        namespace Windows.Devices.Enumeration.Pnp {
                          public enum PnpObjectType {
                            DevicePanel = 8,
                          }
                        }
                        namespace Windows.Devices.Lights {
                          public sealed class LampArray
                          public enum LampArrayKind
                          public sealed class LampInfo
                          public enum LampPurposes : uint
                        }
                        namespace Windows.Devices.Lights.Effects {
                          public interface ILampArrayEffect
                          public sealed class LampArrayBitmapEffect : ILampArrayEffect
                          public sealed class LampArrayBitmapRequestedEventArgs
                          public sealed class LampArrayBlinkEffect : ILampArrayEffect
                          public sealed class LampArrayColorRampEffect : ILampArrayEffect
                         public sealed class LampArrayCustomEffect : ILampArrayEffect
                          public enum LampArrayEffectCompletionBehavior
                          public sealed class LampArrayEffectPlaylist : IIterable&lt;ILampArrayEffect&gt;, IVectorView&lt;ILampArrayEffect&gt;
                          public enum LampArrayEffectStartMode
                          public enum LampArrayRepetitionMode
                          public sealed class LampArraySolidEffect : ILampArrayEffect
                          public sealed class LampArrayUpdateRequestedEventArgs
                        }
                        namespace Windows.Devices.PointOfService {
                          public sealed class BarcodeScannerCapabilities {
                            bool IsVideoPreviewSupported { get; }
                          }
                          public sealed class ClaimedBarcodeScanner : IClosable {
                            event TypedEventHandler&lt;ClaimedBarcodeScanner, ClaimedBarcodeScannerClosedEventArgs&gt; Closed;
                          }
                          public sealed class ClaimedBarcodeScannerClosedEventArgs
                          public sealed class ClaimedCashDrawer : IClosable {
                            event TypedEventHandler&lt;ClaimedCashDrawer, ClaimedCashDrawerClosedEventArgs&gt; Closed;
                          }
                          public sealed class ClaimedCashDrawerClosedEventArgs
                          public sealed class ClaimedLineDisplay : IClosable {
                            event TypedEventHandler&lt;ClaimedLineDisplay, ClaimedLineDisplayClosedEventArgs&gt; Closed;
                          }
                          public sealed class ClaimedLineDisplayClosedEventArgs
                          public sealed class ClaimedMagneticStripeReader : IClosable {
                            event TypedEventHandler&lt;ClaimedMagneticStripeReader, ClaimedMagneticStripeReaderClosedEventArgs&gt; Closed;
                          }
                          public sealed class ClaimedMagneticStripeReaderClosedEventArgs
                          public sealed class ClaimedPosPrinter : IClosable {
                            event TypedEventHandler&lt;ClaimedPosPrinter, ClaimedPosPrinterClosedEventArgs&gt; Closed;
                          }
                          public sealed class ClaimedPosPrinterClosedEventArgs
                        }
                        namespace Windows.Devices.PointOfService.Provider {
                          public sealed class BarcodeScannerDisableScannerRequest {
                            IAsyncAction ReportFailedAsync(int reason);
                            IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
                          }
                          public sealed class BarcodeScannerEnableScannerRequest {
                            IAsyncAction ReportFailedAsync(int reason);
                            IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
                          }
                          public sealed class BarcodeScannerFrameReader : IClosable
                          public sealed class BarcodeScannerFrameReaderFrameArrivedEventArgs
                          public sealed class BarcodeScannerGetSymbologyAttributesRequest {
                            IAsyncAction ReportFailedAsync(int reason);
                            IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
                          }
                          public sealed class BarcodeScannerHideVideoPreviewRequest {
                            IAsyncAction ReportFailedAsync(int reason);
                            IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
                          }
                          public sealed class BarcodeScannerProviderConnection : IClosable {
                            IAsyncOperation&lt;BarcodeScannerFrameReader&gt; CreateFrameReaderAsync();
                            IAsyncOperation&lt;BarcodeScannerFrameReader&gt; CreateFrameReaderAsync(BitmapPixelFormat preferredFormat);
                            IAsyncOperation&lt;BarcodeScannerFrameReader&gt; CreateFrameReaderAsync(BitmapPixelFormat preferredFormat, BitmapSize preferredSize);
                          }
                          public sealed class BarcodeScannerSetActiveSymbologiesRequest {
                            IAsyncAction ReportFailedAsync(int reason);
                            IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
                          }
                          public sealed class BarcodeScannerSetSymbologyAttributesRequest {
                            IAsyncAction ReportFailedAsync(int reason);
                            IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
                          }
                          public sealed class BarcodeScannerStartSoftwareTriggerRequest {
                            IAsyncAction ReportFailedAsync(int reason);
                            IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
                          }
                          public sealed class BarcodeScannerStopSoftwareTriggerRequest {
                            IAsyncAction ReportFailedAsync(int reason);
                            IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
                          }
                          public sealed class BarcodeScannerVideoFrame : IClosable
                        }
                        namespace Windows.Devices.Sensors {
                          public sealed class HingeAngleReading
                          public sealed class HingeAngleSensor
                          public sealed class HingeAngleSensorReadingChangedEventArgs
                          public sealed class SimpleOrientationSensor {
                            public static IAsyncOperation&lt;SimpleOrientationSensor&gt; FromIdAsync(string deviceId);
                            public static string GetDeviceSelector();
                          }
                        }
                        namespace Windows.Devices.SmartCards {
                          public static class KnownSmartCardAppletIds
                          public sealed class SmartCardAppletIdGroup {
                            string Description { get; set; }
                            IRandomAccessStreamReference Logo { get; set; }
                            ValueSet Properties { get; }
                            bool SecureUserAuthenticationRequired { get; set; }
                          }
                          public sealed class SmartCardAppletIdGroupRegistration {
                            string SmartCardReaderId { get; }
                            IAsyncAction SetPropertiesAsync(ValueSet props);
                          }
                        }
                        namespace Windows.Devices.WiFi {
                          public enum WiFiPhyKind {
                            HE = 10,
                          }
                        }
                        namespace Windows.Foundation {
                          public static class GuidHelper
                        }
                        namespace Windows.Globalization {
                          public static class CurrencyIdentifiers {
                            public static string MRU { get; }
                            public static string SSP { get; }
                            public static string STN { get; }
                            public static string VES { get; }
                          }
                        }
                        namespace Windows.Graphics.Capture {
                          public sealed class Direct3D11CaptureFramePool : IClosable {
                            public static Direct3D11CaptureFramePool CreateFreeThreaded(IDirect3DDevice device, DirectXPixelFormat pixelFormat, int numberOfBuffers, SizeInt32 size);
                          }
                          public sealed class GraphicsCaptureItem {
                            public static GraphicsCaptureItem CreateFromVisual(Visual visual);
                          }
                        }
                        namespace Windows.Graphics.Display.Core {
                          public enum HdmiDisplayHdrOption {
                            DolbyVisionLowLatency = 3,
                          }
                          public sealed class HdmiDisplayMode {
                            bool IsDolbyVisionLowLatencySupported { get; }
                          }
                        }
                        namespace Windows.Graphics.Holographic {
                          public sealed class HolographicCamera {
                            bool IsHardwareContentProtectionEnabled { get; set; }
                            bool IsHardwareContentProtectionSupported { get; }
                          }
                          public sealed class HolographicQuadLayerUpdateParameters {
                            bool CanAcquireWithHardwareProtection { get; }
                            IDirect3DSurface AcquireBufferToUpdateContentWithHardwareProtection();
                          }
                        }
                        namespace Windows.Graphics.Imaging {
                          public sealed class BitmapDecoder : IBitmapFrame, IBitmapFrameWithSoftwareBitmap {
                            public static Guid HeifDecoderId { get; }
                            public static Guid WebpDecoderId { get; }
                          }
                          public sealed class BitmapEncoder {
                            public static Guid HeifEncoderId { get; }
                          }
                        }
                        namespace Windows.Management.Deployment {
                          public enum DeploymentOptions : uint {
                            ForceUpdateFromAnyVersion = (uint)262144,
                          }
                          public sealed class PackageManager {
                            IAsyncOperationWithProgress&lt;DeploymentResult, DeploymentProgress&gt; DeprovisionPackageForAllUsersAsync(string packageFamilyName);
                          }
                          public enum RemovalOptions : uint {
                            RemoveForAllUsers = (uint)524288,
                          }
                        }
                        namespace Windows.Media.Audio {
                          public sealed class CreateAudioDeviceInputNodeResult {
                            HResult ExtendedError { get; }
                          }
                          public sealed class CreateAudioDeviceOutputNodeResult {
                            HResult ExtendedError { get; }
                          }
                          public sealed class CreateAudioFileInputNodeResult {
                            HResult ExtendedError { get; }
                          }
                          public sealed class CreateAudioFileOutputNodeResult {
                            HResult ExtendedError { get; }
                          }
                          public sealed class CreateAudioGraphResult {
                            HResult ExtendedError { get; }
                          }
                          public sealed class CreateMediaSourceAudioInputNodeResult {
                            HResult ExtendedError { get; }
                          }
                          public enum MixedRealitySpatialAudioFormatPolicy
                          public sealed class SetDefaultSpatialAudioFormatResult
                          public enum SetDefaultSpatialAudioFormatStatus
                          public sealed class SpatialAudioDeviceConfiguration
                          public sealed class SpatialAudioFormatConfiguration
                          public static class SpatialAudioFormatSubtype
                        }
                        namespace Windows.Media.Control {
                          public sealed class CurrentSessionChangedEventArgs
                          public sealed class GlobalSystemMediaTransportControlsSession
                          public sealed class GlobalSystemMediaTransportControlsSessionManager
                          public sealed class GlobalSystemMediaTransportControlsSessionMediaProperties
                          public sealed class GlobalSystemMediaTransportControlsSessionPlaybackControls
                          public sealed class GlobalSystemMediaTransportControlsSessionPlaybackInfo
                          public enum GlobalSystemMediaTransportControlsSessionPlaybackStatus
                          public sealed class GlobalSystemMediaTransportControlsSessionTimelineProperties
                          public sealed class MediaPropertiesChangedEventArgs
                          public sealed class PlaybackInfoChangedEventArgs
                          public sealed class SessionsChangedEventArgs
                          public sealed class TimelinePropertiesChangedEventArgs
                        }
                        namespace Windows.Media.Core {
                          public sealed class MediaStreamSample {
                            IDirect3DSurface Direct3D11Surface { get; }
                            public static MediaStreamSample CreateFromDirect3D11Surface(IDirect3DSurface surface, TimeSpan timestamp);
                          }
                        }
                        namespace Windows.Media.Devices.Core {
                          public sealed class CameraIntrinsics {
                            public CameraIntrinsics(Vector2 focalLength, Vector2 principalPoint, Vector3 radialDistortion, Vector2 tangentialDistortion, uint imageWidth, uint imageHeight);
                          }
                        }
                        namespace Windows.Media.Import {
                          public enum PhotoImportContentTypeFilter {
                            ImagesAndVideosFromCameraRoll = 3,
                          }
                          public sealed class PhotoImportItem {
                            string Path { get; }
                          }
                        }
                        namespace Windows.Media.MediaProperties {
                          public sealed class ImageEncodingProperties : IMediaEncodingProperties {
                            public static ImageEncodingProperties CreateHeif();
                          }
                          public static class MediaEncodingSubtypes {
                            public static string Heif { get; }
                          }
                        }
                        namespace Windows.Media.Protection.PlayReady {
                          public static class PlayReadyStatics {
                            public static IReference&lt;DateTime&gt; HardwareDRMDisabledAtTime { get; }
                            public static IReference&lt;DateTime&gt; HardwareDRMDisabledUntilTime { get; }
                            public static void ResetHardwareDRMDisabled();
                          }
                        }
                        namespace Windows.Media.Streaming.Adaptive {
                          public enum AdaptiveMediaSourceResourceType {
                            MediaSegmentIndex = 5,
                          }
                        }
                        namespace Windows.Networking.BackgroundTransfer {
                          public enum BackgroundTransferPriority {
                            Low = 2,
                          }
                        }
                        namespace Windows.Networking.Connectivity {
                          public sealed class ConnectionProfile {
                            bool CanDelete { get; }
                            IAsyncOperation&lt;ConnectionProfileDeleteStatus&gt; TryDeleteAsync();
                          }
                          public enum ConnectionProfileDeleteStatus
                        }
                        namespace Windows.Networking.NetworkOperators {
                          public enum ESimOperationStatus {
                            CardGeneralFailure = 13,
                            ConfirmationCodeMissing = 14,
                            EidMismatch = 18,
                            InvalidMatchingId = 15,
                            NoCorrespondingRequest = 23,
                            NoEligibleProfileForThisDevice = 16,
                            OperationAborted = 17,
                            OperationProhibitedByProfileClass = 21,
                            ProfileNotAvailableForNewBinding = 19,
                            ProfileNotPresent = 22,
                            ProfileNotReleasedByOperator = 20,
                          }
                        }
                        namespace Windows.Perception {
                          public sealed class PerceptionTimestamp {
                            TimeSpan SystemRelativeTargetTime { get; }
                          }
                          public static class PerceptionTimestampHelper {
                            public static PerceptionTimestamp FromSystemRelativeTargetTime(TimeSpan targetTime);
                          }
                        }
                        namespace Windows.Perception.Spatial {
                          public sealed class SpatialAnchorExporter
                          public enum SpatialAnchorExportPurpose
                          public sealed class SpatialAnchorExportSufficiency
                          public sealed class SpatialLocation {
                            Vector3 AbsoluteAngularAccelerationAxisAngle { get; }
                            Vector3 AbsoluteAngularVelocityAxisAngle { get; }
                          }
                        }
                        namespace Windows.Perception.Spatial.Preview {
                          public static class SpatialGraphInteropPreview
                        }
                        namespace Windows.Services.Cortana {
                          public sealed class CortanaActionableInsights
                          public sealed class CortanaActionableInsightsOptions
                        }
                        namespace Windows.Services.Store {
                          public sealed class StoreAppLicense {
                            bool IsDiscLicense { get; }
                          }
                          public sealed class StoreContext {
                            IAsyncOperation&lt;StoreRateAndReviewResult&gt; RequestRateAndReviewAppAsync();
                            IAsyncOperation&lt;IVectorView&lt;StoreQueueItem&gt;&gt; SetInstallOrderForAssociatedStoreQueueItemsAsync(IIterable&lt;StoreQueueItem&gt; items);
                          }
                          public sealed class StoreQueueItem {
                            IAsyncAction CancelInstallAsync();
                            IAsyncAction PauseInstallAsync();
                            IAsyncAction ResumeInstallAsync();
                          }
                          public sealed class StoreRateAndReviewResult
                         public enum StoreRateAndReviewStatus
                        }
                        namespace Windows.Storage.Provider {
                          public enum StorageProviderHydrationPolicyModifier : uint {
                            AutoDehydrationAllowed = (uint)4,
                          }
                          public sealed class StorageProviderSyncRootInfo {
                            Guid ProviderId { get; set; }
                          }
                        }
                        namespace Windows.System {
                          public sealed class AppUriHandlerHost
                          public sealed class AppUriHandlerRegistration
                          public sealed class AppUriHandlerRegistrationManager
                          public static class Launcher {
                            public static IAsyncOperation&lt;bool&gt; LaunchFolderPathAsync(string path);
                            public static IAsyncOperation&lt;bool&gt; LaunchFolderPathAsync(string path, FolderLauncherOptions options);
                            public static IAsyncOperation&lt;bool&gt; LaunchFolderPathForUserAsync(User user, string path);
                            public static IAsyncOperation&lt;bool&gt; LaunchFolderPathForUserAsync(User user, string path, FolderLauncherOptions options);
                          }
                        }
                        namespace Windows.System.Preview {
                          public enum HingeState
                          public sealed class TwoPanelHingedDevicePosturePreview
                          public sealed class TwoPanelHingedDevicePosturePreviewReading
                          public sealed class TwoPanelHingedDevicePosturePreviewReadingChangedEventArgs
                        }
                        namespace Windows.System.Profile {
                          public enum SystemOutOfBoxExperienceState
                          public static class SystemSetupInfo
                          public static class WindowsIntegrityPolicy
                        }
                        namespace Windows.System.Profile.SystemManufacturers {
                          public sealed class SystemSupportDeviceInfo
                          public static class SystemSupportInfo {
                            public static SystemSupportDeviceInfo LocalDeviceInfo { get; }
                          }
                        }
                        namespace Windows.System.RemoteSystems {
                          public sealed class RemoteSystem {
                            IVectorView&lt;RemoteSystemApp&gt; Apps { get; }
                          }
                          public sealed class RemoteSystemApp
                          public sealed class RemoteSystemAppRegistration
                          public sealed class RemoteSystemConnectionInfo
                          public sealed class RemoteSystemConnectionRequest {
                            RemoteSystemApp RemoteSystemApp { get; }
                            public static RemoteSystemConnectionRequest CreateForApp(RemoteSystemApp remoteSystemApp);
                          }
                          public sealed class RemoteSystemWebAccountFilter : IRemoteSystemFilter
                        }
                        namespace Windows.System.Update {
                          public enum SystemUpdateAttentionRequiredReason
                          public sealed class SystemUpdateItem
                          public enum SystemUpdateItemState
                          public sealed class SystemUpdateLastErrorInfo
                          public static class SystemUpdateManager
                          public enum SystemUpdateManagerState
                          public enum SystemUpdateStartInstallAction
                        }
                        namespace Windows.System.UserProfile {
                          public sealed class AssignedAccessSettings
                        }
                        namespace Windows.UI.Accessibility {
                          public sealed class ScreenReaderPositionChangedEventArgs
                          public sealed class ScreenReaderService
                        }
                        namespace Windows.UI.Composition {
                          public enum AnimationPropertyAccessMode
                          public sealed class AnimationPropertyInfo : CompositionObject
                          public sealed class BooleanKeyFrameAnimation : KeyFrameAnimation
                          public class CompositionAnimation : CompositionObject, ICompositionAnimationBase {
                            void SetExpressionReferenceParameter(string parameterName, IAnimationObject source);
                          }
                          public enum CompositionBatchTypes : uint {
                            AllAnimations = (uint)5,
                            InfiniteAnimation = (uint)4,
                          }
                          public sealed class CompositionGeometricClip : CompositionClip
                          public class CompositionGradientBrush : CompositionBrush {
                            CompositionMappingMode MappingMode { get; set; }
                          }
                          public enum CompositionMappingMode
                          public class CompositionObject : IAnimationObject, IClosable {
                            void PopulatePropertyInfo(string propertyName, AnimationPropertyInfo propertyInfo);
                            public static void StartAnimationGroupWithIAnimationObject(IAnimationObject target, ICompositionAnimationBase animation);
                            public static void StartAnimationWithIAnimationObject(IAnimationObject target, string propertyName, CompositionAnimation animation);
                          }
                          public sealed class Compositor : IClosable {
                            BooleanKeyFrameAnimation CreateBooleanKeyFrameAnimation();
                            CompositionGeometricClip CreateGeometricClip();
                            CompositionGeometricClip CreateGeometricClip(CompositionGeometry geometry);
                            RedirectVisual CreateRedirectVisual();
                            RedirectVisual CreateRedirectVisual(Visual source);
                          }
                          public interface IAnimationObject
                          public sealed class RedirectVisual : ContainerVisual
                        }
                        namespace Windows.UI.Composition.Interactions {
                          public sealed class InteractionSourceConfiguration : CompositionObject
                          public enum InteractionSourceRedirectionMode
                          public sealed class InteractionTracker : CompositionObject {
                            bool IsInertiaFromImpulse { get; }
                            int TryUpdatePosition(Vector3 value, InteractionTrackerClampingOption option);
                            int TryUpdatePositionBy(Vector3 amount, InteractionTrackerClampingOption option);
                          }
                          public enum InteractionTrackerClampingOption
                          public sealed class InteractionTrackerInertiaStateEnteredArgs {
                            bool IsInertiaFromImpulse { get; }
                          }
                          public class VisualInteractionSource : CompositionObject, ICompositionInteractionSource {
                            InteractionSourceConfiguration PointerWheelConfig { get; }
                          }
                        }
                        namespace Windows.UI.Input.Inking {
                          public enum HandwritingLineHeight
                          public sealed class PenAndInkSettings
                          public enum PenHandedness
                        }
                        namespace Windows.UI.Input.Inking.Preview {
                          public sealed class PalmRejectionDelayZonePreview : IClosable
                        }
                        namespace Windows.UI.Notifications {
                          public sealed class ScheduledToastNotificationShowingEventArgs
                          public sealed class ToastNotifier {
                            event TypedEventHandler&lt;ToastNotifier, ScheduledToastNotificationShowingEventArgs&gt; ScheduledToastNotificationShowing;
                          }
                        }
                        namespace Windows.UI.Shell {
                          public enum SecurityAppKind
                          public sealed class SecurityAppManager
                          public struct SecurityAppManagerContract
                          public enum SecurityAppState
                          public enum SecurityAppSubstatus
                          public sealed class TaskbarManager {
                            IAsyncOperation&lt;bool&gt; IsSecondaryTilePinnedAsync(string tileId);
                            IAsyncOperation&lt;bool&gt; RequestPinSecondaryTileAsync(SecondaryTile secondaryTile);
                            IAsyncOperation&lt;bool&gt; TryUnpinSecondaryTileAsync(string tileId);
                          }
                        }
                        namespace Windows.UI.StartScreen {
                          public sealed class StartScreenManager {
                            IAsyncOperation&lt;bool&gt; ContainsSecondaryTileAsync(string tileId);
                            IAsyncOperation&lt;bool&gt; TryRemoveSecondaryTileAsync(string tileId);
                          }
                        }
                        namespace Windows.UI.Text {
                          public sealed class RichEditTextDocument : ITextDocument {
                            void ClearUndoRedoHistory();
                          }
                        }
                        namespace Windows.UI.Text.Core {
                          public sealed class CoreTextLayoutRequest {
                            CoreTextLayoutBounds LayoutBoundsVisualPixels { get; }
                          }
                        }
                        namespace Windows.UI.ViewManagement {
                          public enum ApplicationViewWindowingMode {
                            CompactOverlay = 3,
                            Maximized = 4,
                          }
                        }
                        namespace Windows.UI.ViewManagement.Core {
                          public sealed class CoreInputView {
                            bool TryHide();
                            bool TryShow();
                            bool TryShow(CoreInputViewKind type);
                          }
                          public enum CoreInputViewKind
                        }
                        namespace Windows.UI.WebUI {
                          public sealed class BackgroundActivatedEventArgs : IBackgroundActivatedEventArgs
                          public delegate void BackgroundActivatedEventHandler(object sender, IBackgroundActivatedEventArgs eventArgs);
                          public sealed class NewWebUIViewCreatedEventArgs
                          public static class WebUIApplication {
                            public static event BackgroundActivatedEventHandler BackgroundActivated;
                            public static event EventHandler&lt;NewWebUIViewCreatedEventArgs&gt; NewWebUIViewCreated;
                          }
                          public sealed class WebUIView : IWebViewControl, IWebViewControl2
                        }
                        namespace Windows.UI.Xaml {
                          public class BrushTransition
                          public class ColorPaletteResources : ResourceDictionary
                          public class DataTemplate : FrameworkTemplate, IElementFactory {
                            UIElement GetElement(ElementFactoryGetArgs args);
                            void RecycleElement(ElementFactoryRecycleArgs args);
                          }
                          public sealed class DebugSettings {
                            bool FailFastOnErrors { get; set; }
                          }
                          public sealed class EffectiveViewportChangedEventArgs
                          public class ElementFactoryGetArgs
                          public class ElementFactoryRecycleArgs
                          public class FrameworkElement : UIElement {
                            bool IsLoaded { get; }
                            event TypedEventHandler&lt;FrameworkElement, EffectiveViewportChangedEventArgs&gt; EffectiveViewportChanged;
                            void InvalidateViewport();
                          }
                          public interface IElementFactory
                          public class ScalarTransition
                          public class UIElement : DependencyObject, IAnimationObject {
                            bool CanBeScrollAnchor { get; set; }
                            public static DependencyProperty CanBeScrollAnchorProperty { get; }
                            Vector3 CenterPoint { get; set; }
                            ScalarTransition OpacityTransition { get; set; }
                            float Rotation { get; set; }
                            Vector3 RotationAxis { get; set; }
                            ScalarTransition RotationTransition { get; set; }
                            Vector3 Scale { get; set; }
                            Vector3Transition ScaleTransition { get; set; }
                            Matrix4x4 TransformMatrix { get; set; }
                            Vector3 Translation { get; set; }
                            Vector3Transition TranslationTransition { get; set; }
                            void PopulatePropertyInfo(string propertyName, AnimationPropertyInfo propertyInfo);
                            virtual void PopulatePropertyInfoOverride(string propertyName, AnimationPropertyInfo animationPropertyInfo);
                            void StartAnimation(ICompositionAnimationBase animation);
                            void StopAnimation(ICompositionAnimationBase animation);
                          }
                          public class Vector3Transition
                          public enum Vector3TransitionComponents : uint
                        }
                        namespace Windows.UI.Xaml.Automation {
                          public sealed class AutomationElementIdentifiers {
                            public static AutomationProperty IsDialogProperty { get; }
                          }
                          public sealed class AutomationProperties {
                            public static DependencyProperty IsDialogProperty { get; }
                            public static bool GetIsDialog(DependencyObject element);
                            public static void SetIsDialog(DependencyObject element, bool value);
                          }
                        }
                        namespace Windows.UI.Xaml.Automation.Peers {
                          public class AppBarButtonAutomationPeer : ButtonAutomationPeer, IExpandCollapseProvider {
                            ExpandCollapseState ExpandCollapseState { get; }
                            void Collapse();
                           void Expand();
                          }
                          public class AutomationPeer : DependencyObject {
                            bool IsDialog();
                            virtual bool IsDialogCore();
                          }
                          public class MenuBarAutomationPeer : FrameworkElementAutomationPeer
                          public class MenuBarItemAutomationPeer : FrameworkElementAutomationPeer, IExpandCollapseProvider, IInvokeProvider
                        }
                        namespace Windows.UI.Xaml.Controls {
                          public sealed class AnchorRequestedEventArgs
                          public class AppBarElementContainer : ContentControl, ICommandBarElement, ICommandBarElement2
                          public sealed class AutoSuggestBox : ItemsControl {
                            object Description { get; set; }
                            public static DependencyProperty DescriptionProperty { get; }
                          }
                          public enum BackgroundSizing
                          public sealed class Border : FrameworkElement {
                            BackgroundSizing BackgroundSizing { get; set; }
                            public static DependencyProperty BackgroundSizingProperty { get; }
                            BrushTransition BackgroundTransition { get; set; }
                          }
                          public class CalendarDatePicker : Control {
                            object Description { get; set; }
                            public static DependencyProperty DescriptionProperty { get; }
                          }
                          public class ComboBox : Selector {
                            object Description { get; set; }
                            public static DependencyProperty DescriptionProperty { get; }
                            bool IsEditable { get; set; }
                            public static DependencyProperty IsEditableProperty { get; }
                            string Text { get; set; }
                            Style TextBoxStyle { get; set; }
                            public static DependencyProperty TextBoxStyleProperty { get; }
                            public static DependencyProperty TextProperty { get; }
                            event TypedEventHandler&lt;ComboBox, ComboBoxTextSubmittedEventArgs&gt; TextSubmitted;
                          }
                          public sealed class ComboBoxTextSubmittedEventArgs
                          public class CommandBarFlyout : FlyoutBase
                          public class ContentPresenter : FrameworkElement {
                            BackgroundSizing BackgroundSizing { get; set; }
                            public static DependencyProperty BackgroundSizingProperty { get; }
                            BrushTransition BackgroundTransition { get; set; }
                          }
                          public class Control : FrameworkElement {
                            BackgroundSizing BackgroundSizing { get; set; }
                            public static DependencyProperty BackgroundSizingProperty { get; }
                            CornerRadius CornerRadius { get; set; }
                            public static DependencyProperty CornerRadiusProperty { get; }
                          }
                          public class DataTemplateSelector : IElementFactory {
                            UIElement GetElement(ElementFactoryGetArgs args);
                            void RecycleElement(ElementFactoryRecycleArgs args);
                          }
                          public class DatePicker : Control {
                            IReference&lt;DateTime&gt; SelectedDate { get; set; }
                            public static DependencyProperty SelectedDateProperty { get; }
                            event TypedEventHandler&lt;DatePicker, DatePickerSelectedValueChangedEventArgs&gt; SelectedDateChanged;
                          }
                          public sealed class DatePickerSelectedValueChangedEventArgs
                          public class DropDownButton : Button
                          public class DropDownButtonAutomationPeer : ButtonAutomationPeer, IExpandCollapseProvider
                          public class Frame : ContentControl, INavigate {
                            bool IsNavigationStackEnabled { get; set; }
                            public static DependencyProperty IsNavigationStackEnabledProperty { get; }
                            bool NavigateToType(TypeName sourcePageType, object parameter, FrameNavigationOptions navigationOptions);
                          }
                          public class Grid : Panel {
                            BackgroundSizing BackgroundSizing { get; set; }
                            public static DependencyProperty BackgroundSizingProperty { get; }
                          }
                          public class IconSourceElement : IconElement
                          public interface IScrollAnchorProvider
                          public class MenuBar : Control
                          public class MenuBarItem : Control
                          public class MenuBarItemFlyout : MenuFlyout
                          public class NavigationView : ContentControl {
                            UIElement ContentOverlay { get; set; }
                            public static DependencyProperty ContentOverlayProperty { get; }
                            bool IsPaneVisible { get; set; }
                            public static DependencyProperty IsPaneVisibleProperty { get; }
                            NavigationViewOverflowLabelMode OverflowLabelMode { get; set; }
                            public static DependencyProperty OverflowLabelModeProperty { get; }
                            UIElement PaneCustomContent { get; set; }
                            public static DependencyProperty PaneCustomContentProperty { get; }
                            NavigationViewPaneDisplayMode PaneDisplayMode { get; set; }
                            public static DependencyProperty PaneDisplayModeProperty { get; }
                            UIElement PaneHeader { get; set; }
                            public static DependencyProperty PaneHeaderProperty { get; }
                            NavigationViewSelectionFollowsFocus SelectionFollowsFocus { get; set; }
                            public static DependencyProperty SelectionFollowsFocusProperty { get; }
                            NavigationViewShoulderNavigationEnabled ShoulderNavigationEnabled { get; set; }
                            public static DependencyProperty ShoulderNavigationEnabledProperty { get; }
                            NavigationViewTemplateSettings TemplateSettings { get; }
                            public static DependencyProperty TemplateSettingsProperty { get; }
                          }
                          public class NavigationViewItem : NavigationViewItemBase {
                            bool SelectsOnInvoked { get; set; }
                            public static DependencyProperty SelectsOnInvokedProperty { get; }
                          }
                          public sealed class NavigationViewItemInvokedEventArgs {
                            NavigationViewItemBase InvokedItemContainer { get; }
                            NavigationTransitionInfo RecommendedNavigationTransitionInfo { get; }
                          }
                          public enum NavigationViewOverflowLabelMode
                          public enum NavigationViewPaneDisplayMode
                          public sealed class NavigationViewSelectionChangedEventArgs {
                            NavigationTransitionInfo RecommendedNavigationTransitionInfo { get; }
                            NavigationViewItemBase SelectedItemContainer { get; }
                          }
                          public enum NavigationViewSelectionFollowsFocus
                          public enum NavigationViewShoulderNavigationEnabled
                          public class NavigationViewTemplateSettings : DependencyObject
                          public class Panel : FrameworkElement {
                            BrushTransition BackgroundTransition { get; set; }
                          }
                          public sealed class PasswordBox : Control {
                            bool CanPasteClipboardContent { get; }
                            public static DependencyProperty CanPasteClipboardContentProperty { get; }
                            object Description { get; set; }
                            public static DependencyProperty DescriptionProperty { get; }
                            FlyoutBase SelectionFlyout { get; set; }
                            public static DependencyProperty SelectionFlyoutProperty { get; }
                            void PasteFromClipboard();
                          }
                          public class RelativePanel : Panel {
                            BackgroundSizing BackgroundSizing { get; set; }
                            public static DependencyProperty BackgroundSizingProperty { get; }
                          }
                          public class RichEditBox : Control {
                            object Description { get; set; }
                            public static DependencyProperty DescriptionProperty { get; }
                            FlyoutBase ProofingMenuFlyout { get; }
                            public static DependencyProperty ProofingMenuFlyoutProperty { get; }
                            FlyoutBase SelectionFlyout { get; set; }
                            public static DependencyProperty SelectionFlyoutProperty { get; }
                            RichEditTextDocument TextDocument { get; }
                            event TypedEventHandler&lt;RichEditBox, RichEditBoxSelectionChangingEventArgs&gt; SelectionChanging;
                          }
                          public sealed class RichEditBoxSelectionChangingEventArgs
                          public sealed class RichTextBlock : FrameworkElement {
                            FlyoutBase SelectionFlyout { get; set; }
                            public static DependencyProperty SelectionFlyoutProperty { get; }
                            void CopySelectionToClipboard();
                          }
                          public sealed class ScrollContentPresenter : ContentPresenter {
                            bool CanContentRenderOutsideBounds { get; set; }
                            public static DependencyProperty CanContentRenderOutsideBoundsProperty { get; }
                            bool SizesContentToTemplatedParent { get; set; }
                            public static DependencyProperty SizesContentToTemplatedParentProperty { get; }
                          }
                          public sealed class ScrollViewer : ContentControl, IScrollAnchorProvider {
                            bool CanContentRenderOutsideBounds { get; set; }
                            public static DependencyProperty CanContentRenderOutsideBoundsProperty { get; }
                            UIElement CurrentAnchor { get; }
                            double HorizontalAnchorRatio { get; set; }
                            public static DependencyProperty HorizontalAnchorRatioProperty { get; }
                            bool ReduceViewportForCoreInputViewOcclusions { get; set; }
                            public static DependencyProperty ReduceViewportForCoreInputViewOcclusionsProperty { get; }
                            double VerticalAnchorRatio { get; set; }
                            public static DependencyProperty VerticalAnchorRatioProperty { get; }
                            event TypedEventHandler&lt;ScrollViewer, AnchorRequestedEventArgs&gt; AnchorRequested;
                            public static bool GetCanContentRenderOutsideBounds(DependencyObject element);
                            void RegisterAnchorCandidate(UIElement element);
                            public static void SetCanContentRenderOutsideBounds(DependencyObject element, bool canContentRenderOutsideBounds);
                            void UnregisterAnchorCandidate(UIElement element);
                          }
                          public class SplitButton : ContentControl
                          public class SplitButtonAutomationPeer : FrameworkElementAutomationPeer, IExpandCollapseProvider, IInvokeProvider
                          public sealed class SplitButtonClickEventArgs
                          public class StackPanel : Panel, IInsertionPanel, IScrollSnapPointsInfo {
                            BackgroundSizing BackgroundSizing { get; set; }
                            public static DependencyProperty BackgroundSizingProperty { get; }
                          }
                          public sealed class TextBlock : FrameworkElement {
                            FlyoutBase SelectionFlyout { get; set; }
                            public static DependencyProperty SelectionFlyoutProperty { get; }
                            void CopySelectionToClipboard();
                          }
                          public class TextBox : Control {
                            bool CanPasteClipboardContent { get; }
                            public static DependencyProperty CanPasteClipboardContentProperty { get; }
                            bool CanRedo { get; }
                            public static DependencyProperty CanRedoProperty { get; }
                           bool CanUndo { get; }
                            public static DependencyProperty CanUndoProperty { get; }
                            object Description { get; set; }
                            public static DependencyProperty DescriptionProperty { get; }
                            FlyoutBase ProofingMenuFlyout { get; }
                            public static DependencyProperty ProofingMenuFlyoutProperty { get; }
                            FlyoutBase SelectionFlyout { get; set; }
                            public static DependencyProperty SelectionFlyoutProperty { get; }
                            event TypedEventHandler&lt;TextBox, TextBoxSelectionChangingEventArgs&gt; SelectionChanging;
                            void ClearUndoRedoHistory();
                            void CopySelectionToClipboard();
                            void CutSelectionToClipboard();
                            void PasteFromClipboard();
                            void Redo();
                            void Undo();
                          }
                          public sealed class TextBoxSelectionChangingEventArgs
                          public class TextCommandBarFlyout : CommandBarFlyout
                          public class TimePicker : Control {
                            IReference&lt;TimeSpan&gt; SelectedTime { get; set; }
                            public static DependencyProperty SelectedTimeProperty { get; }
                            event TypedEventHandler&lt;TimePicker, TimePickerSelectedValueChangedEventArgs&gt; SelectedTimeChanged;
                          }
                          public sealed class TimePickerSelectedValueChangedEventArgs
                          public class ToggleSplitButton : SplitButton
                          public class ToggleSplitButtonAutomationPeer : FrameworkElementAutomationPeer, IExpandCollapseProvider, IToggleProvider
                          public sealed class ToggleSplitButtonIsCheckedChangedEventArgs
                          public class ToolTip : ContentControl {
                            IReference&lt;Rect&gt; PlacementRect { get; set; }
                            public static DependencyProperty PlacementRectProperty { get; }
                          }
                          public class TreeView : Control {
                            bool CanDragItems { get; set; }
                            public static DependencyProperty CanDragItemsProperty { get; }
                            bool CanReorderItems { get; set; }
                            public static DependencyProperty CanReorderItemsProperty { get; }
                            Style ItemContainerStyle { get; set; }
                            public static DependencyProperty ItemContainerStyleProperty { get; }
                            StyleSelector ItemContainerStyleSelector { get; set; }
                            public static DependencyProperty ItemContainerStyleSelectorProperty { get; }
                            TransitionCollection ItemContainerTransitions { get; set; }
                            public static DependencyProperty ItemContainerTransitionsProperty { get; }
                            object ItemsSource { get; set; }
                            public static DependencyProperty ItemsSourceProperty { get; }
                            DataTemplate ItemTemplate { get; set; }
                            public static DependencyProperty ItemTemplateProperty { get; }
                            DataTemplateSelector ItemTemplateSelector { get; set; }
                            public static DependencyProperty ItemTemplateSelectorProperty { get; }
                            event TypedEventHandler&lt;TreeView, TreeViewDragItemsCompletedEventArgs&gt; DragItemsCompleted;
                            event TypedEventHandler&lt;TreeView, TreeViewDragItemsStartingEventArgs&gt; DragItemsStarting;
                            DependencyObject ContainerFromItem(object item);
                            DependencyObject ContainerFromNode(TreeViewNode node);
                            object ItemFromContainer(DependencyObject container);
                            TreeViewNode NodeFromContainer(DependencyObject container);
                          }
                          public sealed class TreeViewCollapsedEventArgs {
                            object Item { get; }
                          }
                          public sealed class TreeViewDragItemsCompletedEventArgs
                          public sealed class TreeViewDragItemsStartingEventArgs
                          public sealed class TreeViewExpandingEventArgs {
                            object Item { get; }
                          }
                          public class TreeViewItem : ListViewItem {
                            bool HasUnrealizedChildren { get; set; }
                            public static DependencyProperty HasUnrealizedChildrenProperty { get; }
                            object ItemsSource { get; set; }
                            public static DependencyProperty ItemsSourceProperty { get; }
                          }
                          public sealed class WebView : FrameworkElement {
                            event TypedEventHandler&lt;WebView, WebViewWebResourceRequestedEventArgs&gt; WebResourceRequested;
                          }
                          public sealed class WebViewWebResourceRequestedEventArgs
                        }
                        namespace Windows.UI.Xaml.Controls.Maps {
                          public enum MapTileAnimationState
                          public sealed class MapTileBitmapRequestedEventArgs {
                            int FrameIndex { get; }
                          }
                          public class MapTileSource : DependencyObject {
                            MapTileAnimationState AnimationState { get; }
                            public static DependencyProperty AnimationStateProperty { get; }
                            bool AutoPlay { get; set; }
                            public static DependencyProperty AutoPlayProperty { get; }
                            int FrameCount { get; set; }
                            public static DependencyProperty FrameCountProperty { get; }
                            TimeSpan FrameDuration { get; set; }
                            public static DependencyProperty FrameDurationProperty { get; }
                            void Pause();
                            void Play();
                            void Stop();
                          }
                          public sealed class MapTileUriRequestedEventArgs {
                            int FrameIndex { get; }
                          }
                        }
                        namespace Windows.UI.Xaml.Controls.Primitives {
                          public class CommandBarFlyoutCommandBar : CommandBar
                          public sealed class CommandBarFlyoutCommandBarTemplateSettings : DependencyObject
                          public class FlyoutBase : DependencyObject {
                            bool AreOpenCloseAnimationsEnabled { get; set; }
                            public static DependencyProperty AreOpenCloseAnimationsEnabledProperty { get; }
                            bool InputDevicePrefersPrimaryCommands { get; }
                            public static DependencyProperty InputDevicePrefersPrimaryCommandsProperty { get; }
                            bool IsOpen { get; }
                            public static DependencyProperty IsOpenProperty { get; }
                            FlyoutShowMode ShowMode { get; set; }
                            public static DependencyProperty ShowModeProperty { get; }
                            public static DependencyProperty TargetProperty { get; }
                            void ShowAt(DependencyObject placementTarget, FlyoutShowOptions showOptions);
                          }
                          public enum FlyoutPlacementMode {
                            Auto = 13,
                            BottomEdgeAlignedLeft = 7,
                            BottomEdgeAlignedRight = 8,
                            LeftEdgeAlignedBottom = 10,
                            LeftEdgeAlignedTop = 9,
                            RightEdgeAlignedBottom = 12,
                            RightEdgeAlignedTop = 11,
                            TopEdgeAlignedLeft = 5,
                            TopEdgeAlignedRight = 6,
                          }
                         public enum FlyoutShowMode
                          public class FlyoutShowOptions
                          public class NavigationViewItemPresenter : ContentControl
                        }
                        namespace Windows.UI.Xaml.Core.Direct {
                          public interface IXamlDirectObject
                          public sealed class XamlDirect
                          public struct XamlDirectContract
                          public enum XamlEventIndex
                          public enum XamlPropertyIndex
                          public enum XamlTypeIndex
                        }
                        namespace Windows.UI.Xaml.Hosting {
                          public class DesktopWindowXamlSource : IClosable
                          public sealed class DesktopWindowXamlSourceGotFocusEventArgs
                          public sealed class DesktopWindowXamlSourceTakeFocusRequestedEventArgs
                          public sealed class WindowsXamlManager : IClosable
                          public enum XamlSourceFocusNavigationReason
                          public sealed class XamlSourceFocusNavigationRequest
                          public sealed class XamlSourceFocusNavigationResult
                        }
                        namespace Windows.UI.Xaml.Input {
                          public sealed class CanExecuteRequestedEventArgs
                          public sealed class ExecuteRequestedEventArgs
                          public sealed class FocusManager {
                            public static event EventHandler&lt;GettingFocusEventArgs&gt; GettingFocus;
                            public static event EventHandler&lt;FocusManagerGotFocusEventArgs&gt; GotFocus;
                            public static event EventHandler&lt;LosingFocusEventArgs&gt; LosingFocus;
                            public static event EventHandler&lt;FocusManagerLostFocusEventArgs&gt; LostFocus;
                          }
                          public sealed class FocusManagerGotFocusEventArgs
                          public sealed class FocusManagerLostFocusEventArgs
                          public sealed class GettingFocusEventArgs : RoutedEventArgs {
                            Guid CorrelationId { get; }
                          }
                          public sealed class LosingFocusEventArgs : RoutedEventArgs {
                            Guid CorrelationId { get; }
                          }
                          public class StandardUICommand : XamlUICommand
                          public enum StandardUICommandKind
                          public class XamlUICommand : DependencyObject, ICommand
                        }
                        namespace Windows.UI.Xaml.Markup {
                          public sealed class FullXamlMetadataProviderAttribute : Attribute
                          public interface IXamlBindScopeDiagnostics
                          public interface IXamlType2 : IXamlType
                        }
                        namespace Windows.UI.Xaml.Media {
                          public class Brush : DependencyObject, IAnimationObject {
                            void PopulatePropertyInfo(string propertyName, AnimationPropertyInfo propertyInfo);
                            virtual void PopulatePropertyInfoOverride(string propertyName, AnimationPropertyInfo animationPropertyInfo);
                          }
                        }
                        namespace Windows.UI.Xaml.Media.Animation {
                          public class BasicConnectedAnimationConfiguration : ConnectedAnimationConfiguration
                          public sealed class ConnectedAnimation {
                            ConnectedAnimationConfiguration Configuration { get; set; }
                          }
                          public class ConnectedAnimationConfiguration
                          public class DirectConnectedAnimationConfiguration : ConnectedAnimationConfiguration
                          public class GravityConnectedAnimationConfiguration : ConnectedAnimationConfiguration
                          public enum SlideNavigationTransitionEffect
                          public sealed class SlideNavigationTransitionInfo : NavigationTransitionInfo {
                            SlideNavigationTransitionEffect Effect { get; set; }
                            public static DependencyProperty EffectProperty { get; }
                          }
                        }
                        namespace Windows.UI.Xaml.Navigation {
                          public class FrameNavigationOptions
                        }
                        namespace Windows.Web.UI {
                          public interface IWebViewControl2
                          public sealed class WebViewControlNewWindowRequestedEventArgs {
                            IWebViewControl NewWindow { get; set; }
                            Deferral GetDeferral();
                          }
                          public enum WebViewControlPermissionType {
                            ImmersiveView = 6,
                          }
                        }
                        namespace Windows.Web.UI.Interop {
                          public sealed class WebViewControl : IWebViewControl, IWebViewControl2 {
                            event TypedEventHandler&lt;WebViewControl, object&gt; GotFocus;
                            event TypedEventHandler&lt;WebViewControl, object&gt; LostFocus;
                            void AddInitializeScript(string script);
                          }
                        }
                        
                        

                        Removals

                        
                        namespace Windows.Gaming.UI {
                          public sealed class GameMonitor
                          public enum GameMonitoringPermission
                        }
                        
                        

                        Additional Store Win32 APIs

                        The following APIs have been added to the Application Certification Kit list.

                        • CM_Get_Device_Interface_List_SizeA
                        • CM_Get_Device_Interface_List_SizeW
                        • CM_Get_Device_Interface_ListA
                        • CM_Get_Device_Interface_ListW
                        • CM_MapCrToWin32Err
                        • CM_Register_Notification
                        • CM_Unregister_Notification
                        • CoDecrementMTAUsage
                        • CoIncrementMTAUsage
                        • ColorAdapterGetCurrentProfileCalibration
                        • ColorAdapterGetDisplayCurrentStateID
                        • ColorAdapterGetDisplayProfile
                        • ColorAdapterGetDisplayTargetWhitePoint
                        • ColorAdapterGetDisplayTransformData
                        • ColorAdapterGetSystemModifyWhitePointCaps
                        • ColorAdapterRegisterOEMColorService
                        • ColorAdapterUnregisterOEMColorService
                        • ColorProfileAddDisplayAssociation
                        • ColorProfileGetDisplayDefault
                        • ColorProfileGetDisplayList
                        • ColorProfileGetDisplayUserScope
                        • ColorProfileRemoveDisplayAssociation
                        • ColorProfileSetDisplayDefaultAssociation
                        • DeviceIoControl
                        • EventEnabled
                        • EventProviderEnabled
                        • ExitProcess
                        • GetProductInfo
                        • GetSystemTimes
                        • InstallColorProfileA
                        • InstallColorProfileW
                        • LocalFileTimeToLocalSystemTime
                        • LocalSystemTimeToLocalFileTime
                        • MLCreateOperatorRegistry
                        • RoIsApiContractMajorVersionPresent
                        • RoIsApiContractPresent
                        • RtlVirtualUnwind
                        • SetProcessValidCallTargetsForMappedView
                        • sqlite3_value_nochange
                        • sqlite3_vtab_collation
                        • sqlite3_vtab_nochange
                        • sqlite3_win32_set_directory
                        • sqlite3_win32_set_directory16
                        • sqlite3_win32_set_directory8
                        • ubiditransform_close
                        • ubiditransform_open
                        • ubiditransform_transform
                        • ubrk_getBinaryRules
                        • ubrk_openBinaryRules
                        • unum_formatDoubleForFields
                        • uplrules_getKeywords
                        • uspoof_check2
                        • uspoof_check2UTF8
                        • uspoof_closeCheckResult
                        • uspoof_getCheckResultChecks
                        • uspoof_getCheckResultNumerics
                        • uspoof_getCheckResultRestrictionLevel
                        • uspoof_openCheckResult

                         

                        The post Windows 10 SDK Preview Build 17758 available now! appeared first on Windows Developer Blog.

                        Not Hotdog: A Shiny app using the Custom Vision API

                        $
                        0
                        0

                        I had a great time at the EARL Conference in London last week, and as always came away invigorated by all of the applications of R that were presented there. I'll do a full writeup of the conference later this week, but in the meantime I wanted to share the materials from my own presentation there, "Not Hotdog: Image Recognition with R and the Custom Vision API". I've embedded the slides below:

                        This is an embedded Microsoft Office presentation, powered by Office Online.

                        In the presentation, I showed how easy it is to build a Shiny app to perform image recognition with the Custom Vision API in Azure. I've provided all of the R code behind the app in this GitHub repository, and thanks to the httr package it takes just a few lines of R code to interface with the API to upload images, train a transfer learning model, and classify new images. It's also handy to be able to use the customvision.ai web portal to review your tagged images and model performance. 

                        This was my first time building a Shiny app, and it was really easy to learn how to do it thanks to the RStudio tutorials. One feature that proved particularly useful was reactive expressions, which would cache the results of the prediction and prevent a call out to the API every time I touched the "threshold" slider. The prediction API is rate-limited, and this way it was only called when the user actually changes the image URL, a relatively rare event. In all, it took me less than a day to learn Shiny and create the application below. Here it is correctly classifying this image of a hotdog (source), and correctly identifying that this hot dog (source) is not a hotdog.

                        Hotdog

                        Nothotdog

                        If you want to try this out yourself, all you'll need is an Azure subscription (new subscribers can also get $200 free credits) and the R code in the repository below.

                        Github (revodavid): Not Hotdog vision recognition using R and Custom Vision API


                        This month on Bing: Visual Search expanded, Education, American Sign Language, and more

                        $
                        0
                        0

                        We’re excited to announce several new features this September at Bing.

                        Back in June 2018, we launched Visual Search to let you search what you see. Built on the Intelligent Image Search technology already in Bing, Visual Search allows you to search, shop and learn more about the world through the photos you take or images you see.

                        Now, we are expanding on these prior capabilities by adding Text Transcription, updates to the Visual Search dialog box, and Math Solver—which allows you to solve complex equations by simply taking a photo. As part of Bing’s continued focus on providing educational resources, we’ve also expanded Bing’s educational capabilities to include interactive sections in math, science, and languages including American Sign Language (ASL).

                        Finally, for our NFL fans out there, we’ve added contextually specific, nuanced answers on a huge variety of past games just in time for football season. 

                        All of these features are added with the intention of saving you valuable time whether by helping you quickly search using an image, transcribing text in an instant, or learning something new on the fly. 
                         

                        Math Solver 

                         

                        Ever needed help solving a tough math problem? Or when helping a loved one with homework —would you know where to start? 

                        Math-Solver.png

                        Released this past month on iOS and coming soon on Android, Math Solver allows you to solve mathematical equations, including calculus, by taking a picture and tapping the “Math” button located in the bottom menu between “Auto” and “Barcode.” Math Solver will solve the equation with a step-by-step explanation and will also connect you to related online videos, such as Kahn Academy lectures, to help you grow your mathematical knowledge. 

                         

                        Text Transcription 

                         

                        In addition to using Visual Search for identifying objects, finding similar images, finding similar products for purchase, and even solving math problems, Visual Search will allow you to quickly copy and search the text you see directly through your camera. You can take a picture of a phone number to call it directly, add an email to your contacts list, visit a website, navigate to an address, or simply copy/paste text. 

                        Have you ever been in a restaurant and found a dish you can’t pronounce… or identify? Snap a pic, tap the menu text and search. Need to copy that annoyingly long serial number or transcribe a website URL without typing? We have you covered. Stay tuned for Text Transcription rolling out on iOS in the next few weeks. 

                        Text-Transcription.png



                        Search Faster Using Images

                         

                        Based on user feedback, we’ve now made searching via image on Bing.com easier than ever by redesigning the Visual Search dialog box, which you can find after clicking on the Bing Image tab. The more intuitive design now allows for dragging and dropping an image, either from Bing or your computer’s desktop, directly into the image box to search in a snap. You can also copy and paste an image directly into the box in addition to a URL or take a picture directly by using your computer’s camera. 

                        VisualSearchBox.png


                        We hope these improvements help to make visual search an intuitive and easy tool for your everyday life.

                         

                        Bing Education Carousel

                         

                        As kids head back to school, we know that homework time can be stressful for parents. In addition to Math Solver, Bing has released a full suite of math, science, and language tools to make learning easy for parents and students. Many of these experiences feature step-by-step instructions and quizzes to help with memory and retention. Next time you want to learn a popular topic quickly, search for “Education on Bing” or try specific topics like “Solar System,” “Fraction Calculator,” and “Language Translator.” 

                        EDU-(1).png


                        American Sign Language (ASL) on Bing

                         

                        In the spirit of empowering every customer and enabling learning across diverse groups, the Bing team has also created a “Sign Language” experience. The experience contains 159 videos of words and 13 phrases in American Sign Language (ASL), uniquely catered towards a growing audience of students learning sign language in schools. While the experience currently has trained interpreters signing in the videos, the Bing team is working towards an even more authentic experience featuring people from the deaf community. 

                        ASL.png

                        With September being National Deaf Awareness Month, we invite all our users to grow their knowledge of ASL. Next time you want to communicate across a loud room, communicate with someone who signs, or simply learn something beautiful, visit Bing.com on desktop or mobile and search for "sign language."

                         

                        Intelligent Answers for NFL 

                         

                        The start of the school year also means the start of football season, and now whether you are a Fantasy Football rising star or simply an NFL aficionado, Bing has you covered with in-depth, context-specific information on every NFL game ever played. 

                        After painfully seeing your team’s quarterback sacked, have you ever wondered which quarterback was intercepted the most last year?  Or when your team is down by a few points with five minutes remaining, do you wonder which team scored the most touchdowns in the last five minutes in 2017?  Who was the NFL rushing yards leader in the 4th quarter of the 2015 playoffs? 

                        Bing can now reason over the detailed NFL statistics of every game since 2000 and instantly crunch the numbers to summarize the answer to your question that’s concise and presentable.  Download the Bing mobile app for iOS or Android and see for yourself.

                        NFL.png

                        We value your feedback


                        We hope you’re as excited about these features as we are! As always, we truly value your perspective, and one of the best ways for you to provide it is via the Bing Insider Program, which gives our most passionate users the opportunity to provide feedback to Bing engineers and partner teams via monthly calls, Insider events, interactive feedback sessions, and more.

                        Please register at the Bing Insider site to be a Bing Insider. And even if you don’t join today, the website is chock-full of great content featuring our Insiders as well as new Bing features. We hope you enjoy the new site and come back often.

                        - The Bing Team

                         

                        Parallel Custom Build Tools in Visual Studio 2017

                        $
                        0
                        0

                        This post was written by Olga Arkhipova.

                        Many projects need to use additional tools during their build to generate sources for further compilation or perform other custom build tasks. VC projects have always supported Custom Build Tool integration, but it had some limitations. One of the popular requests on UserVoice is Allow custom build tools to run in parallel. Another problem is that often custom build outputs need to be passed to other build tools (for instance, some tools can generate C/C++ sources, which need to be passed to the compiler) and there was no easy way to specify that.

                        To solve these problems, we added support for parallel execution of custom build tools and new options for easier build integration in Visual Studio 2017 15.8.

                        Also, one of the most common build customizations is copying files. Before, we recommended using “Custom Build Step” or “Custom Build Tool” and specifying copy commands there. Now you can use simple Copy File options.

                        Custom Build Tool Options

                        If you are familiar with Custom Build Tool usage, you can skip this section and go to New Custom Build Tool Options.

                        Custom Build Tool options are not visible in the “Project Properties” until you have at least one file using “Custom Build Tool” as its “Item Type”. You can set it in the file’s “General” properties:

                        Custom Build Tool Item Type

                        As for other tools, you can set “Custom Build Tool” properties for each file, but usually it is easier to set them at the project configuration level, so they apply to all files which use “Custom Build Tool”. Note that you can use MSBuild Well-known Item Metadata there to specify file specific options. Unfortunately, you cannot use other item properties as they are not guaranteed to be defined before their usage.

                        Custom Build Tool Properties

                        Command Line

                        Specifies the command(s) to execute in cmd.exe. If you want several commands to be executed for the same file, you can add them to a script file or just enter them in the property editor, each command on a separate line:

                        Custom Command Line

                        Description

                        Specifies a message to be printed before execution of the command(s), optional. It is added as ‘’echo” command, so if you want to use “>” symbol, it needs to be escaped: “^>”.

                        Outputs

                        Specifies the output files the custom build tool generates.

                        Additional Dependencies

                        Specifies any additional input files to use for the custom build tool. Required for incremental build.

                        Link Objects

                        Specify whether the Inputs and outputs files with specific extensions (.obj, .lib, .res, .rsc) are passed to the linker.
                        This property was added in VS 2010 to maintain the behavior of pre-msbuild vc projects (VS 2009 and before) where file extensions determined which build action was performed on them.

                        MSBuild is operating on items included into a particular named ItemGroup (Item Type), so we recommend using the new “Add Outputs to Item Type” property instead.

                        Treat Output As Content

                        Specify whether the output file is a deployable content. Only used in projects supporting packaging (Universal Windows).

                        Content Root Folder

                        Content root folder to use for packaging.

                        Execute After, Execute Before

                        Define when to execute Custom Build Tool and Custom Build Step commands. For historical reasons they are executed at the same time.
                        The options are using msbuild target names, which requires you to have some understanding of msbuild targets execution order during build. There is a long list of the targets in the dropdown you can select from and you can type the target name there as well, but usually you just need to select one of the following targets which represent 3 main steps of C++ build:

                        • BuildGenerateSources
                        • BuildCompile
                        • BuildLink

                        If your custom build needs to be executed in more precise time, you might need to look at your detailed (or binary) build log – you’ll see all targets executed during build and their order.

                        New Custom Build Tool Options

                        Add Outputs to Item Type

                        If you want custom build outputs to become inputs for another build operation, you can specify it here.

                        For instance, if you want the outputs to be compiled, you need to add them to “C/C++ compiler” item type. You also need to make Custom Build Tool to be executed before C/C++ compilation by setting “Execute After” to “BuildGenerateSources” or “Execute Before” to “BuildCompile”.

                        Build in Parallel

                        Specifies that this item can be built in parallel with other custom build tool items.

                        Maximum Processes

                        Maximum number of CPU cores to use for parallel build. A value of 0 utilizes all available processors.

                        Maximum Batch size

                        Maximum number of items to execute together in one cmd.exe process during parallel build. A value of 0 divides items evenly into parallel batches. A value of 1 disables batching.
                        Launching a cmd.exe process takes some time, so larger batches will improve performance if the custom build tool processes items quickly. If your custom build takes significant time, disabling batching will give you better error reporting.

                        Copy File Options

                        If you need to copy a file to one or several locations during build, first you need to change its “Item Type” to “Copy file” and Apply. Then you’ll see “Copy File” properties.

                        Copy File Item Type

                        Again, you can define the options for individual files, or, if they are similar, for project configuration using MSBuild Well-known Item Metadata:

                        Copy File Item Properties

                        Destination Directories

                        You can specify one or several directories (separated by ‘;’) to copy the file to. The default is $(OutDir).

                        Destination File Name

                        You can specify the file name for the destination file(s). The default is the same as source: %(Filename)%(Extension).

                        Other properties are the similar to Custom Build Tool and Custom Build step: you can set if the destination file(s) should be included into a package and when to copy the files during build.

                        Send Us Feedback

                        Please download Visual Studio 2017 version 15.8 and try the new Custom Build Tool and Copy File functionality. We would love to know how it is working for you. Please give us feedback via the comments below or via email (visualcpp@microsoft.com). For general issues please Report a Problem.

                        STL Features and Fixes in VS 2017 15.8

                        $
                        0
                        0

                        15.7 was our first feature complete C++17 library (except floating-point <charconv>), and in 15.8 we have addressed large numbers of outstanding bugs. As usual, we’ve maintained a detailed list of the STL fixes that are available. Visual Studio 2017 15.8 is available at https://visualstudio.microsoft.com/vs/.

                        New Features
                        • Implemented floating-point from_chars() in C++17 <charconv>. It’s approximately 40% faster than the CRT’s strtod()/strtof().
                        • Implemented C++20 feature-test macros in the compiler and STL (except for __has_cpp_attribute which will be implemented in the future). The feature-test macros are always provided regardless of the Standard mode option (/std:c++14 vs. /std:c++17 etc.) – that is, individual feature-test macros are defined (or not) according to the Standard mode option and fine-grained options, but there’s no option for enabling or disabling feature-test macros in their entirety.
                        • Implemented std::is_aggregate.
                        • Added officially supported hooks to allow user iterator type interaction with iterator debugging, already in use by the Guidelines Support Library. See gsl::span for an example implementation of the following customization points, or the type _String_view_iterator in the internal header <xstring>.
                          The customization points are, given a const user_iterator_type cit; and a user_iterator_type it:
                          _Verify_range(cit, cit)
                          Requests that the iterator type check that the parameters form a valid [First, Last) range iterator pair. The standard library provides a version for pointers under _ITERATOR_DEBUG_LEVEL != 0. We strongly recommend this customization point be implemented as a “hidden friend function”, as demonstrated in the gsl::span example.
                          cit._Verify_offset(difference_type off)
                          For random-access iterators, verifies that cit + off is a valid iterator. Typically used to provide better diagnostics of the form “the iterator range passed to this algorithm was invalid” rather than “the iterator was incremented off the end of the range”.
                          static constexpr bool user_iterator_type::_Unwrap_when_unverified
                          Declares to the standard library whether an iterator type wants to be “unchecked” or “unwrapped” even if it can’t be verified in advance by _Verify_range or _Verify_offset. For example, the standard containers set this to true if and only if _ITERATOR_DEBUG_LEVEL == 0. This allows an iterator type to request range checks even in release builds (as desired by gsl::span). If this member is not present, it defaults to false.
                          cit._Unwrapped()
                          Returns an “unchecked” or “unwrapped” iterator denoting the same element as cit. This will be called by the standard library after a _Verify_range or _Verify_offset call, or if _Unwrap_when_unverified is true.
                          it._Seek_to(cit) / it._Seek_to(return value from _Unwrapped())
                          Moves the position of the “wrapped” or “checked” iterator it to the position of the “unwrapped” / “unchecked” iterator supplied. This is generally not intended to perform range checks. This allows algorithms that return iterators like std::fill_n to form their return values without needing each iterator operation in the body of the algorithm to be subject to debugging checks.
                        • The header structure of the STL was changed to allow use of a subset of the library in conditions where the user can’t link with msvcp140.dll, such as driver development. (Previously the hard dependency on msvcp and pragma detect mismatch were injected by our base configuration header included by everything.) The following headers are now considered “core” and don’t inject our runtime dependencies (though we do still assume some form of CRT headers are present):
                          • <cstddef>
                          • <cstdlib>
                          • <initializer_list>
                          • <ratio>
                          • <type_traits>

                          We aren’t actually driver developers ourselves and are interested in feedback in this area if there are things we can do to make these more usable in constrained environments.

                        Correctness Fixes
                        • Implemented Library Issues 2510, 2729, and 2958 for pair and tuple, constraining their assignment operators. This implementation contained a minor regression affecting assignments to std::pair from a type that implicitly converts to std::pair. We’ve fixed that regression for VS 2019 16.0 and are planning to backport the fix to VS 2017 15.9. In the meantime, if you encounter that compiler error, explicitly converting to std::pair is a workaround.
                        • Because user iterators can now officially participate in the iterator debugging system, the _SCL_SECURE_NO_WARNINGS family of warnings has been removed. The previously-pseudo-documented struct _Is_checked_helper remains present in order to avoid breaking user specializations, but it is no longer used by the library directly.
                        • Changed num_get overloads to store default values in the event of a failed parse, as the standard requires.
                        • Fixed incorrect values numeric_limits<integral>::is_modulo and numeric_limits<floating-point>::tinyness_before.
                        • Rewrote several streambuf operations to resolve cases where the streambuf would become confused; for example, cases where seekg(0) would not reset the streambuf position even when the current offset was nonzero.
                        • Fixed cases where basic_filebuf would become confused when set to some multibyte locales; the lead byte table was populated using the “fake POSIX support” locale function _ismbslead, but then used the standard locale function _isleadbyte later in processing, corrupting the state of the basic_filebuf.
                        • Fixed conditions where one could form a corrupted basic_stringbuf (or stringstream) by forcing it to attempt to represent a string of more than INT_MAX characters. The INT_MAX size restriction unfortunately must remain due to ABI compatibility, but at least we now consistently enforce that restriction.
                        • Overhauled std::ws to Do What The Standard Says.
                        • The off-by-default warning C4365 “conversion from ‘type_1’ to ‘type_2’, signed/unsigned mismatch” is now supported by the STL.
                        • Fixed a case C4365 found in put_money where a narrowed wchar_t was emitted instead of the proper raw wchar_t.
                        • Fixed creating an istreambuf_iterator::proxy returning the value stored in the proxy rather than returning the value one would expect from a copied istreambuf_iterator.
                        • Fixed a case where linear_congruential_engine would use unsigned int to do intermediate calculations even when unsigned int could not properly store the intermediate values.
                        • Fixed linear_congruential_engine::seed() to Do What The Standard Says.
                        • Changed parallel algorithms’ partitioning behavior to not special case the foreground thread, improving performance in situations where the system threadpool detects an I/O bound workload and decides to oversubscribe the machine.
                        • Fixed a race condition in std::async that could cause crashes or deadlocks.
                        • Fixed C++17 std::filesystem‘s support .obj containing a __declspec(dllexport), causing unusual conditions like .exes with export tables.
                        • Fixed recursive_directory_iterator::disable_recursion_pending() not being reset after an increment operation.
                        • Fixed a long-standing bug that caused aligned_storage to treat requests for alignment greater than alignof(max_align_t) as requests for alignment equal to alignof(max_align_t). We can’t enable this fix unconditionally without breaking ABI since doing so changes layout of types with members whose type is a highly-aligned specialization of aligned_storage. As an interim solution until a future ABI-breaking release, compilation of programs that use highly-aligned aligned_storage produces a compile error explaining this issue and asking the user to define either _ENABLE_EXTENDED_ALIGNED_STORAGE to request the conforming-but-potentially-ABI-breaking behavior, or _DISABLE_EXTENDED_ALIGNED_STORAGE to request the previous incorrect-but-ABI-safe behavior.
                        Performance and Throughput Improvements
                        • Fixed iterator wrappers like move_iterator and reverse_iterator defeating iterator debugging optimizations. These wrappers remained “checked” even after verified by algorithms. For example, fill(someVectorOfInt.rbegin(), someVectorOfInt.rend()) will properly check the range and convert to reverse_iterator<int *> instead of staying a reverse_iterator<vector::iterator> as in previous releases.
                        • Changed several calls of basic_string::append(1, ch) to basic_string::push_back for micro-perf improvements in iostreams machinery.
                        • Implemented a fast path for binary I/O in iostreams, quadrupling bulk I/O performance.
                        Other Changes
                        • Removed _NOEXCEPT and other internal non-Standard macros.
                        • Increased readability by consistently using nullptr in the STL’s headers.

                        If you have any feedback or suggestions for us, let us know. We can be reached via the comments below, via email (visualcpp@microsoft.com) and you can provide feedback via Help > Report A Problem in the product, or via Developer Community. You can also find us on Twitter (@VisualC) and Facebook (msftvisualcpp).

                        Deep dive into Azure Test Plans

                        $
                        0
                        0

                        Azure Test Plans, a service launched with Azure DevOps earlier this month, provides a browser-based test management solution for exploratory, planned manual, and user acceptance testing. Azure Test Plans also provides a browser extension for exploratory testing and gathering feedback from stakeholders.

                        Manual and exploratory testing continue to be important techniques for evaluating quality of a product/service, alongside the DevOps emphasis on automated testing. In modern software development processes, everybody in the team contributes to or owns quality - including developers, testers, managers, product owners, user experience advocates, and more. Azure Test Plans addresses all these needs. Let’s take a closer look.

                        Note: For automated testing as part of your CI/CD workflow, consider leveraging Azure Pipelines. It provides mechanisms for continuous build, test, and deployment to any platform and cloud.

                        Testing is integral to DevOps and Agile teams

                        A common practice is to base tests on user stories, features, or scenarios that are managed on a Kanban board as in Azure Boards. With Azure Test Plans, a team can leverage manual testing right from within their Kanban board. This provides end-to-end traceability because tests and defects are automatically linked to the requirements and builds being tested, which also helps you track the quality of the requirements.

                        Add, view, and interact with test cases directly from the cards on the Kanban board, and progressively monitor status directly from the card. Developers and testers can use this capability to maximize quality within their teams.

                        Testing in Kanban board

                        Quality is a team sport through exploratory testing

                        Exploratory testing is an approach to software testing that is described as simultaneous learning, test design and test execution. It complements planned testing by being completely unscripted yet being driven by themes/tours. Quality becomes a shared responsibility as exploratory testing can be leveraged by all team members including developers, testers, managers, product owners, user experience advocates, and more. Watch a short video of how this works.

                        The Test & Feedback extension enables exploratory testing techniques in Azure Test Plans. It allows you to spend more time finding issues, and less time filing them. Using the extension is simple:

                        • Capture your findings along with rich diagnostic data. This includes comments, screenshots with annotations, and audio/video recordings that describe your findings and highlight issues. In the background, the extension captures additional information such as user actions via image action log, page load data, and system information about the browser, operating system, and more that later help in debugging or reproducing the issue.
                        • Create work items such as bugs, tasks, and test cases from within the extension. The captured information automatically becomes part of the filed work item and helps with end-to-end traceability.
                        • Collaborate with your team by sharing your findings. Export your session report or connect to Azure Test Plans for a fully integrated experience.

                        Exploratory testing session in progress

                        The extension also helps in soliciting feedback from stakeholders who may reside outside the development team, such as marketing, sales teams, and others. Feedback can be requested from these stakeholders on user stories and features. Stakeholders can then respond to feedback requests - not just to rate and send comments, but also file bugs and tasks directly. Read more in our documentation.

                        Feedback requests on a Stakeholder

                        Planned manual testing for larger teams

                        Testing from within the Kanban board suffices when your testing needs are simple. However, for larger teams with more complex needs such as creating and tracking all testing efforts within a test plan scope, testing across multiple configurations, distributing the tests across multiple testers, tracking the progress against the test plan, etc., you need a full-scale test management solution and Azure Test Plans fulfils this need. 

                        Planned manual testing

                        Planned manual testing in Azure Test Plans lets you organize tests into test plans and test suites. Test suites can be dynamic (requirements-based-suites and query-based-suites) to help you understand the quality of associated requirements under development, or static to help you cover regression tests. Tests can be authored using an Excel-like grid view or other means available. Testers execute tests assigned to them using a runner to test your app(s). The runner can execute in a browser or as a client on your desktop, enabling you to test on any platform or test any app. During execution, rich diagnostic data is collected to help with debugging or reproducing the issue later. Bugs filed during the process automatically include the captured diagnostic data.

                        Test execution with rich data capture

                        To track overall progress and outcomes, leverage lightweight charts, which can be pinned to your dashboard for easy monitoring. Watch a video showing planned manual testing in Azure Test Plans.

                        Charts to help track progress and outcomes

                        We hope this post gives you a quick peek into what Azure Test Plans can do for you – we recommend trying it out for free to learn more and to maximize quality for your software. Happy exploring and testing!

                        Further information

                        Want to learn more? See our documented best practices, videos, and other learning materials for Azure Test Plans.

                        Introducing Bing AMP viewer and Bing AMP cache

                        $
                        0
                        0

                        In 2016, Bing joined the Accelerated Mobile Pages (AMP for short) open-source effort to help you “find” and “do” searches faster, regardless of where you are and on any device when you are looking for informaiton. Today, we are pleased to announce the release of Bing AMP viewer and Bing AMP Cache enabling AMP-enabled web pages to work directly from Bing’s mobile search results allowing Bing to provide faster mobile experiences to Bing users.

                        On Monday, the 17th we started the first phase of the global roll out of this AMP viewer and AMP carrousel in the United States for the news carrousel. We will continue the phased roll out to more web sites, more countries and regions and other links in the search results pages. Also, if you are in the United States, try it out on your mobile device by navigating to https://www.bing.com and search for news related queries and tapping the search results labelled with the AMP icon: AMP lightning bolt icon.

                        Advice for AMP webmasters, AMP advertisers


                        The AMP protocol offers the ability to cache and serve cached copied AMP content that is published on the web, providing faster user experiences on Bing. In order to enable your AMP published content within Bing, you need to allow the Bingbot (our crawler) to fetch AMP content and allow cross-origin resource sharing (CORS) for bing-amp.com domain. Most AMP enabled sites and advertisers have already authorized the CORS sharing for the ampproject.org domain, but now need to also bing-amp.com to the allowed list. 

                        Thank you, 
                        Fabrice Canel
                        Principal Program Manager
                        Microsoft Bing
                         

                        Viewing all 10804 articles
                        Browse latest View live


                        <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>