What we’ve heard and experienced ourselves is that when building applications, you have a frictionless experience when your code editor and tools are integrated and seamless. Yet when developing IoT apps, you often need to manage connected devices and send test messages between the device and IoT Hub at the same time that you’re debugging and working on your code. You’ll likely spend time switching between windows or even screens to monitor the messaging and many components of your development.
To ensure that the tools you need are close at hand, we’ve updated the Cloud Explorer for Visual Studio extension for IoT developers to enable you to view your Azure IoT Hubs, inspect their properties, and perform other actions from within Visual Studio. Cloud Explorer is installed by default if you selected the Azure Workload when installing Visual Studio. To access the latest features, you need to upgrade to Microsoft Visual Studio 2017 Update 9 or later, then download and install the latest extension from Visual Studio marketplace.
Here are some of the new features to help IoT developers easily interact with Azure IoT Hub, and the devices connected to it:
Interact with Azure IoT Hub
Send D2C messages to IoT Hub
Monitor D2C messages sent to IoT Hub
Send C2D messages to device
Monitor C2D messages sent to device
Invoke Direct Method
View and update device twin
Device management
List devices
Get device info
Create and delete devices
IoT Edge development support
Create IoT Edge deployment for device
List modules
View and update module twin
To learn more about what the IoT Hub enables and how to use the latest, check out the IoT Hub documentation.
Easy to Set Up
After you’ve installed Cloud Explorer, you can open Cloud Explorer view from Visual Studio menu View → Cloud Explorer. Sign in to your Azure account by clicking the Account Management icon if you haven’t done this before.
Expand Your subscription → IoT Hubs → Your IoT Hub, the device list will be shown under your IoT Hub node. Select one IoT Hub or device to inspect its properties or perform actions against the resource.
Now you have learned how to access your Azure IoT Hub resources.
Try the Tutorials
If you want to discover the Cloud Explorer features further, we offer the following walkthroughs where you will perform common IoT Hub management actions. To explore advanced or specific IoT scenarios, head over to check out our IoT Hub documentation, where we’re always adding new projects and tutorials.
Your feedback is also very important for us to keep improving and making it even easier to develop your IoT applications. Please share your thoughts with us by suggesting a feature or reporting an issue in our Developer Community
Chaoyi Yuan, Software Engineer
Chaoyi is a software engineer working on IoT tools. He’s currently focus on providing great tools for Visual Studio and Visual Studio Code users.
The second preview of Visual Studio 2019 is now available for download. This release contains a number of improvements and additions to the core experience and different development areas, many of which are a result of your direct feedback. As always, you can check out the release notes for more details or read on for the highlights.
Core IDE experience
Visual Studio 2019 will automatically download updates in the background while your computer is idle. This means you can continue using Visual Studio 2019 until it’s time to install. And, you will only need to wait for the actual installation of the update. The default will be set to “Download all, then install”, and you can modify this by going to Tools > Options > Environment > Product Updates.
In Preview 1, we introduced a new Per-Monitor Awareness (PMA) preview feature that is now enabled by default for users that meet the system requirements of .NET Framework 4.8 and Windows 10 April 2018 Update. Alongside the core IDE, multiple tool windows such as Toolbox, Breakpoints, Watch, Locals, Autos, and Call Stack should now render sharply across monitors with different display and scale configurations.
Search capabilities have improved in two places: the start window and inside the IDE. In the start window, you can now search for project templates by language, platform, and tags via the search box. Preview 2 introduces filters for menus, components, and templates during search in the IDE, as well as the capability to create and add new projects and items directly from the search box.
Based on your feedback, the new blue theme in Visual Studio 2019 has been updated by dialing down luminosity and increasing contrast. The draggable region has been improved as well by making the toolbar region also draggable. As a result, dragging the Visual Studio 2019 window should now be more natural.
The document health feature that was introduced with Preview 1 has been given a visual upgrade in Preview 2. Now, at a glance, you can see how many errors or warnings your document has, and clicking the control will bring up the error list. Code cleanup, which was introduced in Preview 1, has also been given its own control to quickly access the code cleanup features.
C++ development
C++ developers will notice quite a few improvements in this release. Check out the release notes for the full list, but here are some of the highlights:
You now have access to a fresh version of the MSVC compiler and to libraries that:
Add initial support for C++ 20 standards (specifically the “spaceship” operator i.e. <=> under /std:latest),
Enable OpenMP 4 SIMD vectorization as well as many codegen improvements for better runtime performance and build throughput, including a new compiler switch -Ob3 that provides more aggressive inlining
Plus, you can try out the latest C++ productivity improvements, including the newly-enhanced C++ Template IntelliSense, NULL->nullptr refactoring, quick fixes for missing #include and using namespace declaration, missing semicolons, and more.
C# development
Visual Studio 2019 Preview 2 adds a couple more new C# 8.0 language features on top of the ones that shipped in Preview 1 (Take C# 8.0 for a spin). Most notably, C# 8.0 pattern matching now allows recursive patterns, which can dig into the structure of an object, and switch expressions, which are a lightweight expression version of switch statements. To learn more, check out Do more with patterns in C# 8.0 on the .NET Blog.
F# development
A preview of the F# 4.6 language is now available in Visual Studio 2019 Preview 2. You can learn more about the language changes in the F# 4.6 Preview blog post. Additionally, we’ve revamped how the F# language service is initialized by Roslyn, which should result in a consistently faster solution load time for larger solutions.
.NET development
Visual Studio 2019 Preview 2 brings a range of new refactoring and codefix capabilities, such as sync namespace and folder name, pull members up, invert conditional expressions/logical operations, and many more. We’re also gradually rolling out new classification colors which are similar to Visual Studio Code. You can control these via Tools > Options > Environment > Preview Features.
Starting with this release, we are making project files for .NET SDK-style projects a first-class file type in Visual Studio and are supporting things like double-clicking a project node to open the project file and finding a project by name with Go To All (Ctrl + T). Additionally, .NET SDK-style projects will now use the new Integrated Console experience for F5 and Ctrl + F5 on console apps.
Code cleanup also now enables you to save collections of fixers as a profile. Now, if you wanted to apply a small set of targeted fixers frequently while you code and have another more comprehensive set of fixers to apply before preparing for a code review, you can configure profiles to address these different tasks.
Python development
You can now switch between different Python interpreters using the new Python Environments toolbar when editing Python files or working with projects or Open Folder workspaces. Miniconda is available as an optional component during installation so you don’t have to separately install it to create conda environments. Additionally, you can now create Visual Studio Live Share sessions for collaboration on Python code. Check out the Python in Visual Studio 2019 Preview 2 blog post for more details.
Web and container development
If you’re developing with Node.js, you will find JavaScript debugging support for unit tests in this release. If ASP.NET is more your style, you will find that when publishing your application to Azure App Service, you can associate Azure Store and Azure SQL resources with your app as dependencies.
If you’re using containers, Visual Studio 2019 Preview 2 now supports debugging ASP.NET Core applications that use Alpine as a base image. There’s also support for the latest ASP.NET and .NET Core images.
Visual Studio Kubernetes Tools are now integrated in the Azure development workload for easy installation. This will add the Container Application for the Kubernetes project template to Visual Studio, which will automatically create a Dockerfile and Helm chart that you can use. This also enables you to add support for Kubernetes to an existing ASP.NET Core application by right-clicking the project and selecting Add > Container Orchestrator Support. After adding Kubernetes support, you can build, run, and debug your application in a live Azure Kubernetes Service (AKS) cluster with Azure Dev Spaces.
Mobile .NET development
For .NET developers using Xamarin to build mobile apps, Visual Studio 2019 Preview 2 has improved build performance if you use Xamarin.Android 9.1.1 or higher. Xamarin.Android now also supports the latest Android dex compiler (d8) and code shrinker (r8). The Android designer now natively supports Android Pie (9.0) and will show you improved status when loading. You can also use Go-To-Definition (Ctrl + Click) on resource URLs to navigate to the file or line where they are defined.
A new property panel has been added for Xamarin.Forms developers, enabling you to edit common attributes for controls. The Xamarin.Forms templates now use the latest Xamarin.Forms 4.0 release and include a new Xamarin.Forms Shell app that aims to reduce the complexity of a multi-platform app solution.
Last, but not least, load performance for new projects has been improved dramatically, showing performance gains of up to 50% in certain cases. When building apps, you can now also see more detailed build progress information by clicking the background tasks icon in the bottom left of the IDE.
Get started; share feedback
You can download Visual Studio 2019 Preview 2 here or update using the Visual Studio Installer. If you want to give it a spin without installing it, check out the Visual Studio images on Azure. Let us know of any issues you run into by using the Report a Problem tool in Visual Studio. You can also head over to the Visual Studio Developer Community to track your issues, suggest a feature, ask questions, and find answers from others. We use your feedback to continue to improve Visual Studio 2019, so thank you again on behalf of our entire team.
Angel Zhou Program Manager, Visual Studio
Angel Zhou is a program manager on the Visual Studio release engineering team, which is responsible for making Visual Studio releases available to our customers around the world.
Are you inspecting many variables at once in the Locals window? Tired of constantly scrolling through the Watch window to locate the object you are currently interested in? New to Visual Studio 2019 for most languages (with some exclusions such as Xamarin, Unity, and SQL), you can now find your variables and their properties faster using the new search feature found in the Watch, Autos, and Locals windows!
With the new search feature, you will be able to highlight and navigate to specified values contained within the name, value, and type columns of each watch window.
Find your keywords faster using search and highlighting
If you are a fan of scrolling to the items you want, highlighting will allow you to find what you want easier. As you start typing in the search bar, the highlighting of matches currently expanded on screen will occur, giving you a faster alternative to performing a large-scale search.
Navigate between your specified keywords quickly
You can execute a search query using ENTER or the right and left arrow icons (“find next” (F3) and “find previous” (Shift+F3), respectively) shown below. If you are not a fan of scrolling to the items you want, clicking the arrows are also used to navigate through each found match. We based the search navigation on a depth first search model, meaning that matches are found by diving as far into the selected variable as specified before looking for matches within the next variable. You don’t have to sit through the full search if you don’t want to because search can also be cleared and canceled at any time, whether the search is ongoing or not.
Search for items deeply nested in your code
Unable to find what you’re looking for on your initial search? We’ve provided a “Search Depth” drop down to find matches nested X number of levels deep into your objects, where levels are defined similarly to levels in a tree data structure context. This option gives you the power to choose how thorough you want to search inside your objects (up to 10 levels), letting you decide how long or short the search process takes.
When you are searching for items that are already expanded and visible on your screen, these items will always be returned as matches no matter what search depth you have specified. Having to loop back to the item you want after passing it can be a pain, so setting the search depth to 1 will allow you to navigate to previous matches using the “find previous” arrow icon.
Excited to start searching in the Watch, Autos, and Locals windows? Let us know in the comments!
For any issues or suggestions, please let us know via Help > Send Feedback > Report a Problem in the IDE. If you have any additional feedback about this feature, feel free to complete this brief survey.
Leslie Richardson, Program Manager, Visual Studio Debugging & Diagnostics @lyrichardson01
Leslie is a Program Manager on the Visual Studio Debugging and Diagnostics team, focusing primarily on improving the overall debugging experience and feature set.
We are excited to announce that, in our Visual Studio Enterprise 2019 preview, we are expanding Snapshot Debugger support beyond Azure App Services hosting ASP.NET Core and ASP.NET applications to now also include Azure Virtual Machines (VM), Azure Virtual Machine scale sets (VMSS), and Azure Kubernetes Services (AKS)!
When Visual Studio 2017 Enterprise 15.5 became generally available, we introduced the Snapshot Debugger, an innovative diagnostic tool that enables you to quickly and accurately evaluate problems in their Azure production environments without stopping the process and with minimal performance impact.
When an unanticipated issue occurs in production, it can be difficult to replicate the exact conditions in your testing environment and almost impossible to do so on your local development machine. You might consider asking your DevOps team to “turn up” production logging but this relies on you having already anticipated where issues might occur prior to deployment. You may also request that a process dump be taken, but that requires perfect timing and some luck to capture the most important details, you also must gauge how your collection strategy might negatively imy pact performance.
The Snapshot Debugger provides a familiar and powerful debugging experience, allowing developers to set Snappoints and Logpoints in code, similar to debugger breakpoints and tracepoints. When a Snappoint is hit in your production environment, a snapshot is dynamically created without stopping the process. Developers can then attach to these snapshots using Visual Studio and see what’s going on with variables, Locals, Watches and Call Stack windows, all this while the live site continues to serve your customers.
For most PaaS scenarios, Azure App Service is more than capable of encapsulating a complete end-to-end experience. However, for developers and organizations that require greater control over of their platform and environment, VMs remain a critical option and Snapshot Debugger supports them in the latest preview of Visual Studio.
Once your VM/VMSS has been set up to host your ASP.NET or ASP.NET Core web application you can open your project in Visual Studio 2019, and click on the “Debug->Attach to Snapshot Debugger…” menu item, where you will now be able to select VM/VMSS as shown.
The UI experience remains almost identical but now you will be required to select an Azure Storage account to collect your snapshot logs and to share the snapshot collection plan (App Services will also require Azure Storage in Preview 2).
Selecting the “Install Remote Debugger Extension” option will prompt Visual Studio to install the extensions in Azure, which is necessary to view snapshots. This process also opens a specific set of ports (30398, 31398, 31399, 32398) to facilitate communication to your local machine, these ports are not required for retrieving and viewing logpoints.
Azure Kubernetes Services (AKS)
Azure provides an incredible cross platform experience and our debugging and diagnostics tools now provide feature parity in our Kubernetes service offerings.
Before attempting to use any of the Snapshot Debugger features in AKS it is vital that your Docker images include ASP.NET Core 2.2+ installed in a global location, as well as the correctly configured Snapshot Debugger and the requisite environment variables.
To help you enable support for Snapshot Debugger in AKS we have provided a repo containing a set of Dockerfiles that demonstrate the setup on Docker images. We support three variants of Linux (Debian, Alpine and Ubuntu) and they are organized according to the ASP.NET Core version, the OS platform, and the platform architecture.
For example, the ASP.NET Core 2.2 Debian 9 (Stretch) x64 Dockerfile is located at /2.2/stretch-slim/amd64/Dockerfile. This Dockerfile produces an image with Debian 9 x64 as the base with ASP.NET Core 2.2 Runtime, it includes the latest supported Snapshot Debugger backend package and sets the environment variables to load the debugger into your .NET Core application.
We would love to hear your feedback. To report issues, use the Report a Problem tool in Visual Studio. You’ll be able to track your issues on the Visual Studio Developer Community site where you can also ask questions and find answers.
Mark Downie, Program Manager, Visual Studio Diagnostics @poppastring
Mark is a program manager on the Visual Studio Diagnostics team, working on Snapshot Debugger.
If you are a web, mobile or games developer and would like to know how to become more productive and efficient using Visual Studio for Mac then we’ve got you covered. Visual Studio for Mac is a powerful IDE for C# developers that work with Xamarin, .NET Core and Unity workloads. The new video series, hosted on the Visual Studio Toolbox, contains short, roughly 5-minute, videos that cover tips and tricks for specific tasks and may even unveil features you didn’t even know existed! The first few videos will be introducing Visual Studio for Mac and what you can do with it.
You don’t want to miss a single video in the series so make sure you subscribe now. We will be recording and releasing a new video each week over the next few weeks, and the links will be updated on the date specified below. The videos currently feature Program Managers, Cody Beyer (@cl_beyer) and Sayed Ibrahim Hashimi (@SayedIHashimi). You can also provide feedback using the Developer Community portal
In this video, Sayed will give you a very brief overview of some of the types of applications you can develop with Visual Studio for Mac. Since this is a very short video, it just touches on some of the more common types of apps that can be developed. This is the first video in the Visual Studio for Mac Tips and Tricks series. The first few videos will be setting a foundation with some basic information on Visual Studio for Mac. Following that, each video will show one, or a few, tips and tricks for specific tasks.
Visual Studio for Mac is our full-featured IDE for macOS, providing all the tools you need to create ASP.NET Core application, Unity games, Xamarin mobile apps, Azure Functions and so much more. Join Cody as he shows how to download and install Visual Studio for Mac.
In this video, Sayed will show you how you can create your first ASP.NET Core web application with Visual Studio for Mac. The application that will be developed is a web site that displays the emojis available on GitHub. The info for the emojis are retrieved using the GitHub API.
While developing applications, it’s common to need to debug, or simply launch, more than one project. In this video, Sayed will show you how you can do just that. You can launch more than one project on run, or debug, by creating a new Solution Run Configuration.
In this video, Sayed will show you how you can work with multiple solutions in Visual Studio for Mac. Specifically, he will demonstrate two ways to work with multiple solutions:
How to open more than one solution in the same instance of the IDE
How to open more than one instance of Visual Studio for Mac
Want to know how to “git” started with using Visual Studio for Mac? Join Cody as he introduces Git support in Visual Studio for Mac, from check-out to push.
In this video, Cody will demonstrate how to log in and publish a web project to Azure. Join him and learn how to get the most out of Visual Studio for Mac by combining it with the power of Azure.
No IDE is truly ready until it matches your unique style and preferences. In this video, Cody will walk you through the steps to enable dark mode, install custom editor color themes and change the interface language.
Visual Studio for Mac offers the refactoring and suggestion engine that you know and love on Windows. Learn how to get the most out of the power of Roslyn in all of your projects using Visual Studio for Mac.
Visual Studio for Mac supports NuGet for all of your dependency management needs. In this video, Cody will demonstrate how to add a NuGet package to your project, and how to connect Visual Studio for Mac to custom NuGet feeds.
Learn how to be a keyboard wizard and navigate within your project with ease using Visual Studio for Mac. In this video, Cody shares his favorite tips and tricks for navigating around your code.
In this video, Sayed will show you how you can improve your productivity when developing apps with Visual Studio for Mac using the Navigate To feature that allows you quickly find files, code, and more. Navigate To is a feature that is similar to the Visual Studio Quick Launch feature.
Tell us what you think!
We invite you to leave us a comment below and let us know what you think of the series. If these are helpful and valuable to our users, then we will record more videos and keep the series going. If there is another format that you think would be better, we would love to hear your thoughts.
Cody Beyer, Program Manager @cl_beyerCody Beyer is a Program Manager on the Visual Studio for Mac team at Microsoft. His primary areas of focus cover overall performance and reliability of the IDE. He is also interested in computer ethics and privacy and aims to create software that empowers and respects everyone.
Sayed Hashimi, Senior Program Manager @sayedihashimiSayed Ibrahim Hashimi has a computer engineering degree from the University of Florida. He works at Microsoft as a Senior Program Manager creating better .NET Core, and ASP.NET Core, development tools in Visual Studio for Mac. Before joining the Visual Studio for Mac team, he worked on ASP.NET features in Visual Studio. Prior to joining Microsoft, he was a Microsoft Visual C# MVP. Sayed has written four book on MSBuild, http://msbuildbook.com and he is a co-founder of the OmniSharp project.
Visual Studio 2019 now supports per-monitor DPI awareness (PMA) across the IDE. PMA support means the IDE and more importantly, the code you work on appears crisp in any monitor display scale factor and DPI configuration, including across multiple monitors.
Visual Studio 2019 (left) with system scaling vs Visual Studio 2019 (right) with the PMA option enabled.
If you have used Visual Studio across monitors with different scale factors or remoted into a machine with a different configuration than the host device, you might have noticed Visual Studio’s fonts and icons can become blurry and in some cases, even render content incorrectly. That’s because versions prior to Visual Studio 2019 were set to render as a system scaled application, rather than a per-monitor DPI aware application (PMA).
System scaled applications render accurately on the primary display as well as others in the same configuration but have visual regressions such as blurry fonts and images when rendering on displays with different configurations. When working for extended periods of time, these visual regressions can be a distraction or even a physical strain.
Visual Studio 2019 Preview 1 included the core platform support for per-monitor DPI awareness and Preview 2 includes additional fixes for usability issues around scaling, positioning and bounding (e.g. content renders within the bounds of tool windows). Preview 2 also adds several more popular tool windows that now correctly handle per-monitor DPI awareness.
How to enable PMA for Visual Studio 2019
The easiest way to try the new PMA functionality is on Visual Studio 2019 Preview 2. You’ll need to have the Windows 10 April 2018 Update or a newer build installed along with the latest version of .NET Framework 4.8. If you’re still running Preview 1 then you also need to enable “Optimize rendering for screens with different pixel densities” in the Preview Features node of the Tools -> Options dialog.
There are many features where you’ll start to see Visual Studio render clear fonts and crisp images. Here’s a few of the most used UI in Visual Studio where you should notice a difference.
Core Shell
Menus and context menus
Most code editors
Solution Explorer
Team Explorer
Toolbox
Breakpoints
Watch
Locals
Autos
Call Stack
Visual Studio 2019 Preview 2 also fixes some of the usability issues affecting UI positioning, scaling and content bounding that were discovered in Preview 1.
Our goal is to have per-monitor awareness working across the most used features by the time we ship Visual Studio 2019. In future updates, we’ll continue enabling PMA across more areas and look forward to your feedback.
Tell us what you think!
We thank you for your ongoing feedback, and encourage you to install the latest Visual Studio 2019 preview, enable the PMA functionality, and tell us about your experiences through the Developer Community portal. Please upvote PMA related asks or create new ones whenever you feel a specific component (tool window, dialog, etc.) or issue has not being reported.
Reporting your experience alongside your display configurations, PMA feature state (on/off) and for bonus points, any screenshot or video showing the affected areas will help us resolve issues faster, and account for as many use-cases as possible.
Ruben is a Program Manager on the Visual Studio IDE platform team. During his time at Microsoft, he’s helped build tools and services for web & mobile devs in both Visual Studio and the Microsoft Edge F12 dev tools. Before joining Microsoft, he was a professional web developer and has always been passionate about UX.
Are you new to quantum computing and want to improve your skills? Have you done quantum programming before and looking for a new challenge? Microsoft’s Quantum team is excited to invite you to the second Microsoft Q# Coding Contest, organized in collaboration with Codeforces.com.
The contest will be held March 1 through March 4, 2019. It will offer the participants a selection of quantum programming problems of varying difficulty. In each problem, you’ll write Q# code to implement the described transformation on the qubits or to perform a more challenging task. The top 50 participants will win a Microsoft Quantum T-shirt.
This contest is the second one in the series started by the contest held in July 2018. The first contest offered problems on introductory topics in quantum computing: superposition, measurement, quantum oracles and simple algorithms. The second contest will take some of these topics to the next level and introduce some new ones.
For those eager to get a head start in the competition, the warmup round will be held February 22-25, 2019. It will feature a set of simpler problems and focus on getting the participants familiar with the contest environment, the submission system and the problem format. The warmup round is a great introduction, both for those new to Q# or those looking to refresh their skills.
Another great way to prepare for the contest is to work your way through the Quantum Katas. They offer problems on a variety of topics in quantum programming, many of them similar to those used in the first contest. Most importantly, the katas allow you to test and debug your solutions locally, giving you immediate feedback on your code.
Q# can be used with Visual Studio, Visual Studio Code or command line on Windows, macOS or Linux, providing an easy way to start with quantum programming. Any of these platforms can be used in the contest.
We hope to see you at the second global Microsoft Q# Coding Contest!
Mariia Mykhailova, Senior Software Engineer, Quantum @tcnickolas
Mariia Mykhailova is a software engineer at the Quantum Architectures and Computation group at Microsoft. She focuses on developer outreach and education work for the Microsoft Quantum Development Kit. In her spare time she writes problems for programming competitions and creates puzzles.
“Why is this value changing unexpectedly and where or when is this occurring?!”
This is a question many of us dread asking ourselves, knowing that we’ll have to do some tedious trial-and-error debugging to locate the source of this issue. For C++ developers, the exclusive solution to this problem has been the data breakpoint, a debugging tool allowing you to break when a specific object’s property changes. Fortunately, data breakpoints are no longer a C++ exclusive because they are now available for .NET Core (3.0 or higher) in Visual Studio 2019 Preview 2!
Data breakpoints for managed code were a long-requested ask for many of you. They are a great alternative to simply placing a breakpoint on a property’s setter because a data breakpoint focuses on a specific object’s property even when it’s out of scope, whereas the former option may result in constant, irrelevant breaks if you have hundreds of objects calling that function.
How do I set a data breakpoint?
Setting a data breakpoint is as easy as right-clicking on the property you’re interested in watching inside the watch, autos, or locals window and selecting “Break when value changes” in the context menu. All data breakpoints are displayed in the Breakpoints window. They are also represented by the standard, red breakpoint circle next to the specified property.
Setting a data breakpoint in the Locals window and viewing the breakpoint in the Breakpoints window
When can I use data breakpoints?
Now that you know how to set a data breakpoint, now what? Here are some ways to take advantage of data breakpoints when debugging your .NET Core applications.
Let’s say that you want to figure out who is modifying a property in an object and for most of the time, this property change does not happen in the same file. By setting a data breakpoint on the property of interest and continuing, the data breakpoint will stop at the line after the property has been modified.
Break when _data value changes
This also works for objects. The data breakpoint will stop when the property referencing the object changes value, not when the contents of the object change.
Break when the property referencing an object changes
As illustrated in the GIF above, calling the toEdit._artist.ChangeName() function did not cause a breakpoint to hit since it was modifying a property (Name) inside the Song’s Artist property. In contrast, the data breakpoint is hit when the _artist property is assigned a reference to a new object.
Data breakpoints are also useful when you want to know when something is added or removed from a collection. Setting a data breakpoint on the ‘Count’ field of classes from System.Collections.Generic makes it easy to detect when the collection has changed.
Break when an object is added or removed from a list
Are there opportunities for improving managed data breakpoints?
Since Visual Studio 2019 is still in preview, we highly encourage you to experiment, play around with, and provide feedback for this iteration of data breakpoints. Here are some known scenarios where data breakpoints currently cannot be set that we are working on erasing and improving in future Visual Studio updates:
Properties that are not expandable in the tooltip, Locals, Autos, or Watch window
Static variables
Classes with the DebuggerTypeProxy Attribute
Fields inside of structs
Managed data breakpoints also exclude properties that call native code and properties that depend on too many fields.
Ready to try data breakpoints in your .NET Core applications? Let us know in the comments!
For any issues or suggestions about this feature, please let us know via Help > Send Feedback > Report a Problem in the IDE or in the Developer Community.
Leslie Richardson, Program Manager, Visual Studio Debugging & Diagnostics @lyrichardson01
Leslie is a Program Manager on the Visual Studio Debugging and Diagnostics team, focusing primarily on improving the overall debugging experience and feature set.
The power of Visual Studio for desktop and mobile development is unmatched in the industry, and we wanted to ensure that the best in class also had the best collaboration story. Live Share is reimagining this collaboration story by reducing the barriers to collaboration, increasing the fidelity of the collaboration experience while building desktop apps, and enhancing this workflow.
One of the barriers to collaboration for Visual Studio desktop, mobile and console application development was the inability to effectively share your progress while working on an app with your peer. With the VS16.4 release you will now be able to share your application from within a collaboration session. With the cumbersome process of creating and sharing links to start a collaboration session, collaboration did not feel as intuitive. To solve this problem and make collaboration as low-touch as possible, we now have contacts in Live Share that are auto-populated with your recent and contextual collaborators, who can be directly invited to a collaboration session. With all of these new changes, we have also enhanced the interactiveness of a Live Share session with in-built audio calling.
Application casting with contacts can enhance your collaboration workflow, whether it is for your scheduled pairing session, or for debugging a bug with someone with expertise on your team. You don’t need to lose the comfort of your IDE to make progress on blockers in your code. We know that good code takes multiple eyes on it, and with direct invitations to your contacts you easily collaborate with your team.
Getting started with app casting and contacts
To use Live Share with app casting and add contacts, make sure you have Visual Studio 16.4 or higher. Once you have this version of Visual Studio, your Live Share extension will come with app casting when you choose to be an insider. To become an Insider, go to: Tools > Options > Live Share > General > Features and set it to Insiders, as seen in the screenshot below.
With Insiders enabled, you will receive all the coolest new features of Live Share. Live Share is now enabled with not just app casting and contacts, but also VS Live Share Audio. You can jump on a quick call from within a Live Share session without context switching to any other application, thereby extending your coding productivity time.
Directly invite your peers
Contacts will appear automatically once you are an Insider under your contacts pane and are under two categories,
Recent Contacts
These are developers you have previously collaborated with using Live Share. In practice, most developers frequently collaborate with the same people, and therefore, the recent list enables a more repeatable means of working with your team/classroom/etc.
Suggested Contacts
These are developers that have contributed to your currently open project within the last 30 days. In practice, these are the folks you are likely to want to collaborate with, and therefore, we suggest them in order to make it easier to get started.
All your contacts can be invited directly to a Live Share session from within your editor. They’ll get a toast notification that gives them the option to join the session or not. This removes the need to exchange session URLs entirely.
Share your status
With contacts, comes the ability to signal your availability for collaboration. Live Share contacts allow you to set your status to Available, Do Not Disturb, Away or Offline. The idea is to provide you the ability to choose the level of interaction you would like to have with your peers without the need to context switch. Its not only easy to directly invite contacts now, but also to let them know that you are not available to collaborate. You can read up more on how contacts and statuses work here.
Just hit F5
To share the desktop app, you are working on with your peer from within a Live Share session, just start a debug session with F5 . The screenshot below shows an Expense Reporting WPF application being worked on during a Live Share session.
When the host of the session presses f5 to start a debugging session, the app auto launches, and the guest can view the application on their side as well. All participants in the session can interact with the application (and ) and modify it together without committing any changes .
App casting currently works for UWP, WinForms, Win32 C++ apps, C++ and CMake console apps with many more to come!
Call from within your IDE
Now you have app casting working and can share your entire working picture with your peer, but sometimes you really need to talk over the fine details. For this, Live Share has in-built audio calling from within your session! The ability to do an audio call from within your IDE allows you to be productive without context switching out of your focus mode while developing.
Let us know what you think!
With app casting your debugging sessions can be a powerful place to do real-time collaboration and make progress on hard bugs. With direct invitations and status sharing with contacts you now have a new ease to your collaboration process.
We love hearing from you, so tell us what you think about this new feature, and how else you plan to use it alongside audio calling, by leaving feedback here.
You can follow Live Share’s newest offerings through our GitHub release notes, and file for feature requests to let us know what you would like to see us offer next.
The great debates in computing all have one common theme. Whether it is tabs vs. spaces or Vi vs. Emacs, the thread linking all these debates together is keyboard efficiency. The truth is, we spend tons of hours working in an application, and keyboard shortcuts become automatic to us, the same muscle memory that great pianists or sports players have. If you suddenly give a virtuoso pianist a piano where the keys are half as wide and the sharp/flat keys are below as opposed to above the natural keys, they will struggle to make even the most basic melodies while they learn the new arrangement. Likewise, when it comes to keyboard shortcuts in your favorite IDE, any change can be disorienting quickly. Luckily, Visual Studio for Mac offers a ton of customizations to key bindings that will allow you get configure your key combinations to your liking.
First Run
New users to Visual Studio for Mac will notice right away that the IDE offers support for many different key mappings. The first time Visual Studio for Mac is launched on a computer, you will receive a prompt directing you to pick your favorite key mapping.
Here, you can select from four different key mappings to help you be as productive as possible from the first line of code you write. But what if you want even more customizations? Well, Visual Studio for Mac has you covered there as well!
More Customizing
While setting a default keymap is certainly handy, it doesn’t solve all circumstances. There may be custom mappings that you’ve used in other IDEs, or specific commands that are outside the bounds of the array of preconfigured options. With the Key Bindings selection window, you can map every possible command within the IDE to a specific key. To see the Key Binding options, select Visual Studio > Preferences > Environment > Key Bindings.
There are several features that I want to point out in this window, and I will take you through them one by one. The most immediate option you see is that there is a dropdown available for various “Schemes” which map to the options that new users see when they first install the IDE. Here you can select from many different pre-packaged key bindings, such as Visual Studio, VS Code and Xcode.
But what if you want even more control? What if you really, really want “Find Derived Symbols” to be mapped to Control-Option-D? Setting custom keybindings is super easy in Visual Studio for Mac. To get started, you can either scroll through the list of available commands, or search for the command in the search box. The list of available commands is organized by type of command and can be collapsed for easier navigation. Once you find the command you would like to map, you can select it and then type the desired key binding in “Edit Binding” followed by clicking “Apply”. In the below GIF, I set the binding for “New Breakpoint” to Control-Shift-B.
You can also edit an existing breakpoint in a very similar manner. In the below GIF, you can see how to edit the “New File” command to map to Control-Shift-N from the default Command-N. You’ll notice that all I need to do is type in the command I prefer and click apply. If you want to add multiple bindings, simply click “Add” instead of “Apply”.
Finally, with so many commands to remember, it can sometimes be hard to keep track and avoid duplicates. To ensure that each key binding is unique, Visual Studio for Mac checks against all configured commands and warns you of a duplicate if one is detected. It will also check for command duplication, so you can either replace the original or your newly created binding. The GIF below shows what happens when mapping the “New Breakpoint” command to the “Command-C” keyboard binding which conflicts with “Copy”.
Now that you know how to edit the key mappings in any way you see fit, you can fully customize the IDE and get to writing code the way you love! If you want to see more key binding information, please check out our Toolbox video on the subject on Channel 9
If you have any feedback or suggestions, please leave them in the comments below. You can also reach out to us on Twitter at @VisualStudioMac. For any issues that you run into when using Visual Studio for Mac, please Report a Problem.
Visual Studio IntelliCode uses machine learning to offer useful, contextually-rich code completion suggestions as you type, allowing you to learn APIs more quickly and code faster. Although IntelliCode’s base model was trained on over 3000 top open source C# GitHub repositories, it does not include all the custom types in your code base. To produce useful, high-fidelity, contextually-rich suggestions, the model needs to be tailored to unique types or domain-specific APIs that aren’t used in open source code. To make IntelliSense recommendations based on the wisdom of your team’s codebase, the model needs to train with your team’s code.
Earlier this year, we extended our ML model training capabilities beyond our initial Github trained base model to enable you to personalize your IntelliCode completion suggestions by creating team models trained on your own code.
Team completions shared and automated easily!
Your team completions become part of your normal developer workflow just by associating a model to your repo. Anyone with access to your repository, automatically gets team completions – no extra configuration steps are required!
Once you’re ready, you can keep your completions up-to-date with our new Azure DevOps task that can retrain your models on CI. When a change is made to your codebase, the model is automatically trained and shared with your team.
2 steps to team completions
Set up and share
Repository-associated models are automatically shared with others working in the same codebase as long as users have enabled automatic acquisition of team models in Visual Studio. To enable automatic acquisition by going to Tools > Options > IntelliCode > Acquire team models for completion. Access to the repository is access to the model. Be sure you are at least Visual Studio 16.4 preview 4 to enable these preview features.
When training, we collect some information about the checked-out commit where the training took place. Anyone who requests that model must have the same commit in their repository and be able to produce the same information that was collected during training to receive the team model.
See more details on how to acquire and share team completions here.
Automate
Once you’re happy with the team completions on you repo, you should set up to automatically retrain as part of your continuous integration (CI) pipeline in Azure Pipelines. When code changes are pushed to your repository, the build task runs and your team completions are retrained and made available to the repo. In parallel, Visual Studio checks for updates to team completions and will update automatically .
See more details about how to configure and automate the build task here.
Tell us what you think!
We’d love to understand your current experience with IntelliCode and where we can improve. Try out sharing team completions and automating updates today and tell us what you think of the new experience. Please note that you’ll need to be on at least Visual Studio 2019 version 16.4 preview 5 to try out these updates to the IntelliCode team completions experience.
Welcome to the November update of Azure IoT Tools!
In this November release, you will see the new standalone simulator for Azure IoT Edge development, the support of Vcpkg for IoT Plug and Play development and more new features.
Deploy Event Grid module on Azure IoT Edge
Event Grid on IoT Edge brings the power and flexibility of Azure Event Grid to the edge for all pub/sub and event driven scenarios. There are several ways to deploy Event Grid module in VS Code.
1. When adding a new module to your new or existing IoT Edge solution, now there is a new option to choose Azure Event Grid
2. When adding a new module to your new or existing IoT Edge solution, select Module from Azure Marketplace, you can see Azure Event Grid on IoT Edge.
3. In VS Code command palette, type and select Azure IoT Edge: Show Sample Gallery. You can open a new sample with pub/sub Functions along with Event Grid module.
Click here to learn more about Azure Event Grid on IoT Edge.
Standalone simulator for Azure IoT Edge development
For Azure IoT Edge developers, we have Azure IoT EdgeHub Dev Tool to provide a local development experience with a simulator for creating, developing, testing, running, and debugging Azure IoT Edge modules and solutions. However, the Azure IoT EdgeHub Dev Tool runs on top of Python environment. Not every Azure IoT Edge developers especially those using Windows as development environment has Python and Pip installed. Therefore, we have shipped a standalone simulator for Azure IoT EdgeHub Dev Tool so that developers who use Windows as development environment no longer need to setup Python environment. The standalone simulator has already been integrated in the latest release of Azure IoT Tools for Visual Studio Code. When you use Azure IoT Tools for Visual Studio Code,
Support Vcpkg for IoT Plug and Play development
Vcpkg is a cross-platform library manager that helps you manage C and C++ libraries on Windows, Linux and MacOS. With the support of Vcpkg for IoT Plug and Play development, developers could easily leverage the Vcpkg to manage the Azure IoT C device SDK as well as other C/C++ dependencies.
Previously, source code is the only way to include the Azure IoT C device SDK. Now, developers could generate device code stub of IoT Plug and Play via both Vcpkg and source code.
For more details with the step-by-step instructions, you can check out this tutorial to see how to create an IoT Plug and Play device via Vcpkg.
Configure an Embedded Linux C project using containerized device toolchain
We release the preview experience of containerized toolchain months ago aiming to simplify the toolchain acquisition efforts for device developers working on C / C++ project for Embedded Linux that requires the cross-compiling toolchain, device SDK and dependent libraries set up properly. Instead of doing this on local machine, which could lead to a messed-up environment, we provided a couple of common container images for devices with various architectures (e.g. ARMv7, ARM64 and x86).
And now you can further use this feature by configuring an existing C / C++ project you have to be able to compile in the container, and then deploy to the target device you use. If you want to further customize the container, we provided with extra device libraries and packages that are required for your device.
Check the tutorials to learn how to use it for your existing code base.
Try it out
Please don’t hesitate to give it a try and if you’re new to Azure, remember you can sign up for a free Azure account to get $200 free Azure credit and access to over 25 always free services (including Azure IoT Hub)! If you have any feedback, feel free to reach us at https://github.com/microsoft/vscode-azure-iot-tools/issues. We will continuously improve our IoT developer experience to empower every IoT developers on the planet to achieve more!
Here in Redmond, glimpses of holiday cheerare fillingour campus buildings as the season shifts to twinkling lights and frosty temperatures. The Visual Studio team is seizing this time as an opportunityto celebrate the comraderyneeded to respond to developer needs and suggestions. Equally, we are reflecting over what we can improve in the upcoming year as well as plan product features to deliver.
What is more notable is the generosity flowing within our various Microsoft locations. One primary means of meeting community needs is through our annual Giving Tree program. There are festive trees in every building decorated with ornaments of wish list items for a variety of charitable organizations. Teams and individuals are able to pick favorite tag item and gift them. To increase the impact, Microsoft matches the dollar amount for an additional gift to the charity! With giving in mind, we are anticipating this release of Visual Studio 2019 version 16.4 will fill your wish list item of a more stable, productivedevelopment environment.Since we started working on this release in August, we have implemented hundredsDeveloper Community suggestions and bug fixes. Let’s take a look at what you’ll find in this release.
We know GitHub integration brings value to your developer experience. Therefore, we are excited to announce a previous extension making its way into the Visual Studio 2019 product. The ability to have GitHub publishing done directly from Team Explorer has been a favorite because of its seamless communication with GitHub repositories. For this reason, local repositories can be synchronized by clicking the Publish to GitHub button on the Team Explorer Synchronization page. This functionality has been a high priority of our teams, so we are eager to hear what you think.
Publish to GitHub from Visual Studio 2019 v16.4
XAML Hot Reload for Xamarin.Forms
Next, XAML Hot Reload for Xamarin.Forms enables you to make changes to your XAML UI and see them reflected live without requiring another build and deploy. This feature significantly speeds up development to make it easier to build, experiment, and iterate on your user interface. Best of all is how much time you can save since you no longer have to rebuild your application for every tweak.
Because your application is compiled using XAML Hot Reload, it works with all libraries and third-party controls, and is available for iOS and Android. Consequently, it works on all valid deployment targets including simulators, emulators, and physical devices. In the event that you are more curious, check out the XAML Hot Reload for Xamarin.Forms documentation detailed by the team members themselves.
Container Tools window
Another addition that started out as an extension in the Visual Studio Marketplace is the Container Tools window. This new tool window enables you to list, inspect, stop, start, and remove Docker images and containers on a local machine. As a result, you can view folders and files in running containers and open a terminal window.
Container Tools Window in Visual Studio v16.4
XAML tooling improvements for WPF and UWP desktop developers
Furthermore, we are continuing to invest in productivity improvements for desktop developers building WPF and UWP applications. New features include IntelliSense support for XAML snippets, a “Just My XAML” filter for the Live Visual Tree, and a merge resource dictionary feature. Also included, is the ability to pop up the code editor view separate from the XAML designer.
Pinnable Properties Tool
We are continuing to improve debugging capabilities in this release. With this in mind, we are delighted to announce how identifying objects by their properties while debugging has just become easier and more discoverable with the new Pinnable Properties tool. In short, hover the cursor over a property you want to display in the debugger of the Watch, Autos, and Locals windows. Click the pin icon. Next, you will see the information you are looking for at the top of your display!
Pin Properties in Debugger shown in Visual Studio 2019 v16.4
Additionally, to help make debugging asynchronous code easier, we have added new features to Parallel Stacks for Tasks, a window that visualizes Tasks in .NET.
.NET Productivity
We added the new Go To Base command to navigate up the inheritance chain. The Go To Base command is available on the context (right-click) menu or you can type (Alt+Home) on the element you want to navigate through the inheritance hierarchy.
Go To Base Command shown in Visual Studio 2019 v16.4
Also, you can configure the severity level of a code style rule directly through the editor. Place your cursor on the error, warning, or suggestion and type (Ctrl+.) to open the Quick Actions and Refactorings menu. Next, select ‘Configure or Suppress issues’. Finally, select the rule and choose the severity level you would like to configure. This will update your existing EditorConfig with the rule’s new severity. If you do not currently have an .editorconfig file, one will be automatically generated.
Vertical Tabs in Preview
Ever find yourself needing to see more of your document tabs or more lines of code? Now you can take advantage of the horizontal real estate of your widescreen monitors by using vertical document tabs. To learn how to preview this feature, the details are in the vertical document tabs blog.
Vertical Tabs in Visual Studio 2019 v16.4
C++ Tooling
We have made three major improvements in the C++ development experience: the Clang-tidy integration in the editor, Address Sanitizer experimental support, and C++ Build Insights support for the MSVC compiler toolset. In addition to the improvements outlined below, this release also brings C++/CLI support in .NET Core 3.1 and several new enhancements to the CMake integration. These include debug target selection, overview pages and easier customization of environment variables.
Clang-tidy Integration
C++ Code Analysis now natively supports Clang-Tidy for both MSBuild and CMake projects, whether you’re using a Clang or MSVC toolset. clang-tidy checks can run as part of background code analysis, appear as in-editor warnings (squiggles), and display in the Error List.
Clang-Tidy integration in Visual Studio 2019 v16.4
Visual Studio 2019 v16.4 Experimental Address Sanitizer support in MSVC
C++ Build Insights
You also have access to a collection of ETW-based tools that allow you to analyze your C++ builds and make decisions tailored to your own build scenarios. Consequently, there should be improvements to your build times. To learn more, check out the first in a series of blogposts on this topic: Introducing C++ Build Insights.
C++ Build Insights Demonstration in Visual Studio 2019 v16.4
Visual Studio now supports “FIPS compliance mode”
Starting with version 16.4, Visual Studio 2019 now supports “FIPS 140-2 compliance mode” when developing apps and solutions for Windows, Azure, and .NET. As an important note, there are some scenarios which may not use FIPS 140-2 approved algorithms. These include developing apps or solutions for non-Microsoft platforms like Linux, iOS, or Android as well as third-party software included with Visual Studio or extensions that you choose to install. Finally, development for SharePoint solutions does not support FIPS 140-2 compliance mode.
To configure FIPS 140-2 compliance mode for Visual Studio, install .NET Framework 4.8 and enable the Windows group policy setting: “System cryptography: Use FIPS compliant algorithms for encryption, hashing, and signing.”
Extended support for Visual Studio 2019 version 16.4
Visual Studio 2019 version 16.4 is the second supported servicing baseline for Visual Studio 2019. Consequently, Enterprise and Professional customers needing to adopt a long term stable and secure development environment are encouraged to standardize on this version. As explained in more detail in our lifecycle and support policy, version 16.4 will be supported with fixes and security updates for one year after the release of the next servicing baseline.
In addition, now that version 16.4 is available, version 16.0, our last released servicing baseline, will be supported for an additional 12 months. It will go out of support in January 2021. Note as well, versions 16.1, 16.2, and 16.3 are no longer under support. These intermediary releases received servicing fixes only until the next minor update released.
You can acquire the latest most secure version of Visual Studio 2019 version 16.4 in the downloads section of my.visualstudio.com. For more information about Visual Studio supported baselines, please review the support policy for Visual Studio 2019.
End of Support reminders for prior versions of Visual Studio and Expression 4
The following products are nearing their end of support lifetime, which means that we will no longer be issuing security updates for these products. These dates are all available on the Microsoft Lifecycle Policy site.
Visual Studio 2010 suite of products – support ends on July 14, 2020
Expression 4 suite of products – support ends on Oct 13, 2020
Happy Developing into the New Year!
In whatever way you celebrate the season and the new year, we hope these features will keep you producing your best projects until the time comes to unplug and enjoy the festivities. We love to hear inspiring ideas of ways to improve Visual Studio 2019. Please take all questions and suggestions to Developer Community as this is where teams interact the most. Thank you for all you do to contribute to the community, and we wish you all of the best!
Since the launch of Visual Studio 2019 we’ve released many new features for XAML developers working on WPF or UWP desktop applications. With this week’s release of Visual Studio 2019 version 16.4 and 16.5 Preview 1 we’d like to use this opportunity to do a recap of what’s new throughout the year. If you missed our previous releases or simply have not had a chance to catch-up, this blog post will be the one place where you can see every major improvement we’ve made throughout 2019.
XAML Live Debugging Tools:
XAML C# Edit & Continue is now known as XAML Hot Reload (v16.2): XAML C# edit & continue for WPF/UWP customers is now known as XAML Hot Reload, this new name is intended to be better aligned with how the feature actually works (since no pause is required after a XAML edit is made) and match the similar functionality in Xamarin.Forms.
XAML Hot Reload available/unavailable (v16.2): The in-app toolbar has been updated to indicate if XAML Hot Reload is available/unavailable and link to the related documentation. Before this improvement customers had no way to know if XAML Hot Reload was working without trying to first use the feature, which was leading to confusion.
In-app toolbar now themed (v16.2): The in-app toolbar is now styled according to the Visual Studio selected theme colors.
In-app toolbar now themed (v16.2)
In-app toolbar element selection behavior changes: We’ve updated the behavior of the in-app toolbar feature “Enable selection” for selecting elements within the running app. With this change the selector will stop selecting elements after you have selected your first element. This brings it in line with similar tools such as F12 browser tools and is based on customer feedback.
XAML Hot Reload now supports x:bind (UWP) – v16.0: XAML Hot Reload (previous called “XAML Edit & Continue”) now supports editing data bindings created with x:bind for paths containing public properties, element name, indexed property paths (collections), attached properties, and cast properties. Other changes are not supported. This enhancement is available to any app where the minimum and maximum versions target Windows 10 SDK version 1809 (build 10.0.17763) or higher.
XAML Hot Reload support added for WPF resource dictionaries changes (v16.3): XAML Hot Reload now supports updating WPF Resource Dictionaries for real-time updates in the application. Previously this feature was only available to Universal Windows Platform (UWP), but is now supported for WPF .NET Framework, WPF .NET Core and UWP apps. Supported actions include adding a new Resources section definition and adding, deleting and updating resources new/existing sections.
Just My XAML in Live Visual Tree: The Live Visual Tree is a feature that is available to both UWP and WPF developers when they run their application in debug mode and is part of the live editing tooling related to XAML Hot Reload. Previously the feature would display the full live visual tree of the attached running application with no filter possible to see just the XAML you’ve written in your app. This made for a very noisy experience and based on customer feedback we’ve added a new default called “Just My XAML” which will limit the tree to just controls you wrote in your application. While this is the new default it is still possible to go back to the previous behavior through either the button within the Live Visual Tree itself or through a new setting (found under: Options > Debugging > General > Enable Just My XAML).
Just My XAML in Live Visual Tree
In-app toolbar now movable (v16.3): The in-app toolbar has been enhanced so that it is movable within the running WPF/UWP application, enabling developers to drag it left or right within the app to unblock app UI. Note that position to which the toolbar is moved is not stored between sessions and will go back to the default position when your app is restarted.
In-app toolbar now movable (v16.3)
XAML Binding Failures panel (standalone VSIX early alpha preview): To help developers when data binding failures occur in their application, we’ve got a new feature in development that brings a dedicated XAML Binding Failures panel to visual studio. While this feature will eventually work for all XAML developers (WPF, UWP and Xamarin.Forms) in this first preview the new panel will make it easier to identify binding failures for those customers building WPF application.
XAML Binding Failures panel (standalone VSIX early alpha preview)
This feature means that developers will no longer have to use the output window to detect binding failures and make them more discoverable to newer developers.
This feature is still very early in development and not included in Visual Studio, if you wish to start testing it today you can do so by downloading our alpha VSIX.
XAML Designer
WPF Designer now fully available (GA) for WPF .NET Core Projects (v16.3): The XAML Designer for WPF .NET Core applications is now generally available (GA) to all customers without the need for preview feature flag. The XAML Designer for WPF .NET Core applications is slightly different in some behaviors and functionality then WPF .NET Framework Designer, please note this is by design. Given the difference we’d like to encourage customers to report any problems or limitations that you might be running into using Visual Studio feedback feature.
WPF Designer now fully available (GA) for WPF .NET Core Projects (v16.3)
XAML Designer zoom/position now defaults to Fit All (v16.4): Based on customer feedback we’ve reevaluated the default XAML Designer zoom behavior that occurs when you open a XAML window/page/control/etc. The previous experienced stored the zoom level and position for each file across Visual Studio sessions which caused confusion when customers were coming back to a file after some time had passed. Starting with this release we will only store the zoom level and position for the duration of the active session and go back to a “fit all” default once Visual Studio is restarted.
Create Data Binding Dialog (v16.4): Visual Studio has had a data binding dialog available to WPF .NET Framework developers from the right-click of the XAML Designer and Property Explorer, and this dialog was also previously available to UWP developers. In this release we’re bringing back this experience to UWP developers and adding support for WPF .NET Core applications. This feature is still in development and will continue to improve in the future to bring back feature parity with .NET Framework dialog capabilities.
XAML Designer Suggested Actions (v16.5 Preview): In this release we’ve made available a new preview featured called Suggested Actions that enables easy access to common properties when a control is selected within the XAML Designer. To use this feature first enable it through Options > Preview Features > XAML Suggested Actions. Once enabled click on a supported control and use the lightbulb to expand and interact with the Suggestion Actions UI. In this release supported controls include: Border, Button, Canvas, CheckBox, ComboBox, Grid, Image, Label, ListBox, ListView, StackPanel, TextBlock, TextBox. While in preview this feature is also only available for WPF .NET Core applications and doesn’t support extensibility, nor is it feature complete.
XAML Designer Suggested Actions (v16.5 Preview)
(Please note that this feature is under active development and might change significantly before final release, so your feedback is crucial, and we hope to hear from you through the Visual Studio feedback tool.)
XAML Editor
IntelliCode Support for XAML (v16.0): IntelliCode is an AI-assisted IntelliSense for multiple languages that predicts the most likely correct API for the developer to use instead of just an alphabetical list of members. IntelliCode supports languages such as C#, C++, XAML and others.
Improvements to #regions IntelliSense (v16.4): Starting with Visual Studio 2015 #region support has been available for WPF and UWP XAML developers and more recently for Xamarin.Forms. In this release we’ve fixed an IntelliSense bug, with this fix #regions will now show properly as you begin to type <!.
Snippets in XAML IntelliSense (v16.4): IntelliSense has been enhanced to support showing XAML snippets, this will work for both built-in snippets and any custom snippets that you add manually. Starting with this release we’re also including some out-of-the-box XAML snippets: #region, Column definition, Row definition, Setter and Tag.
Pop up XAML editor as a separate window from designer (v16.4): It is now possible to easily split the XAML Designer and its underlying XAML editor into separate windows using the new Pop up XAML button next to the XAML tab. When clicked the XAML designer will minimize its attached XAML tab and pop open a new window for just the XAML editor view. You can move this new window to any display or tab group in Visual Studio. Note that it is still possible to expand the original XAML view but regardless all XAML views of the same file will stay synchronized in real-time.
Pop up XAML editor as a separate window from designer (v16.4)
Displaying resources for referenced assemblies (v16.4): XAML IntelliSense has been updated to support displaying XAML resources from a referenced assembly (when source is not available) for WPF Framework and WPF .NET Core projects.
XAML Islands:
Improved XAML Island support (v16.4): We’ve added support for XAML Islands scenario for Windows Forms and WPF .NET Core 3 apps making it easier to add UWP XAML control into these applications. With these improvements a .NET Core 3 project can a reference to UWP project that contains custom UWP XAML controls. Those custom controls can be used by the WindowsXamlHost controls shipped within the Windows Community Toolkit v6 (Microsoft.Toolkit.Wpf.UI.XamlHost v6.0). You can also use the Windows Application Packaging project to generates MSIX for you .NET Core 3 with Islands. To learn how to get started visit our documentation.
Resources & Templates
Merge Resource Dictionary:It is now possible to easily merge an existing resource dictionary within your UWP/WPF project with any valid XAML file using the new feature available through the solution explorer. Simply open the XAML file in which you want to add the merge statement, then find the file you wish to merge in and right-click on it in solution explorer. In the context menu select the option “Merge Resource Dictionary Into Active Window”, which will add the right merge XAML with path.
Merge Resource Dictionary
Edit Template now works with controls from 3rd party controls: It is now possible to create a copy of a controls template even when it’s not part of your solution as source code. With this change the “Edit Template” feature will now be available and work as it does for 1st party elements where the source is available today. Note that this feature is applicable to both 3rd party control libraries and 1st party where source isn’t available.
Packaging and Signing
Signing Certificates for UWP apps (v16.3): Brought back the ability to create and import signing certificate files (.pfx) through the Manifest Designer. We’ve also introduced the ability to create and import signing certificates through the Packaging Wizard to streamline the signing process.
Signing Certificates for UWP apps (v16.3)
Related News
Recently there were also other announcements that are relevant to desktop developers, if you missed any of these here is a consolidated list for your consideration:
Visual Studio App Center now support .NET desktop applications including WinForms, WPF and UWP. This includes apps powered by .NET Framework or .NET Core and supported features include deployment, health monitoring (crash reporting) and real-time insights (custom telemetry). For full details check out their recent blog post.
Windows has announced WinUI 3, with both the alpha release and long-term roadmap announced. With WinUI 3 developers will be able to use the power of modern XAML to build both desktop and UWP applications powered by .NET Core or C++. To learn all the details see their roadmap.
Windows UI Library 2.3 is now available, which continues to add more controls for UWP developers. For all the details see their release notes.
Ignite 2019 XAML conference sessions are now available as free on-demand videos, if you missed Ignite this year their worth checking out.
Conclusion
These features are also just some of the things we’ve been working on, with many more still in development and we hope to share more information with you when their ready.
For now, please keep your feedback coming as many of the above items were created based on customer input, as your input is a critical part of how we improve Visual Studio.
Finally, you can also see demos for many of the above features in our latest Visual Studio Toolbox video:
A few months ago, I wrote a blog post about the DebuggerDisplay attribute. This is a managed attribute that lets you customize how you view objects in debugging windows by “favoriting” specific properties. Since that post, we’ve streamlined DebuggerDisplay’s behavior with Pinnable Properties, a new managed feature available for Visual Studio 16.4!
Native developers: Fear not, Pinnable Properties will also be available for C++ in a later update!
Pinning a property
How does the Pinnable Properties tool work?
The Pinnable Properties tool is located in DataTips and the Autos, Locals, and Watch windows at debug time. To use the tool, hover over a property and select the toggle-able pin icon that appears or select the “Pin Member as Favorite” option in the context menu. You will immediately see your selected members bubble to the top of your property list and appear in the Values column of any of the debugger inspection windows, replacing the default object type that is typically displayed. Now you can quickly identify and scan through your countless objects, greatly increasing your productivity.
Pinning properties in DataTips
The properties you pin will persist across all your future debugging sessions until you decide to unpin them. Also, you can filter unpinned properties and hide property names via the Watch window toolbar or a DataTip context menu.
Filter out unpinned properties
Toggle pinned property names
Why does the Pinnable Properties tool exist?
Your feedback determined that there was high demand for quickly identifying objects in debugger windows via specific properties. Though DebuggerDisplay and Natvis can accomplish this task, they have several drawbacks that we observed and learned from you and other developers, including:
having to modify your code to use the attribute
the inability to use the attribute dynamically at debug time
the lack of discoverability (I have been asked many times if DebuggerDisplay is a Visual Studio 2019 exclusive feature when it’s been out for many, many years now…)
We created the Pinnable Properties tool to reduce these issues and provide with you with an easier, more intuitive, and real-time method to customize your object inspection experience without having to modify your code or override your ToString() method.
Try out Pinnable Properties and give us even more feedback!
Pinnable Properties would not have been possible without your enthusiasm and feedback for improving the existing DebuggerDisplay and Natvis behavior. We encourage you to try it out and share your thoughts on how we can make this tool even better in the comments or via this survey!
Today, we released Visual Studio 2019 for Mac version 8.4 Preview 4. This preview version of Visual Studio for Mac brings support for the latest stable version of .NET Core, Scaffolding support for ASP.NET Core projects, and additional improvements to overall product accessibility. Developers using Xamarin Pair to Mac should also look at the additional information in this blog post related to our release schedule.
For more information on the other changes in this release, look at our release notes.
Stay on the latest and greatest with support for .NET Core 3.1
With this release, Visual Studio for Mac adds official support for the newly released .NET Core 3.1. While this release of .NET Core brings with it a small series of improvements over .NET Core 3.0, it’s important to note that .NET Core 3.1 is a long-term supported (LTS) release. This means it will be supported for three years.
Updating to Preview 4 will install the .NET Core 3.1 SDK. If you previously installed Visual Studio for Mac without selecting the .NET Core target in the installer, you’ll need to take the following steps to get started developing .NET Core in Visual Studio for Mac:
We’re committed to empowering all Mac developers with the ability to bring their thoughts to life using Visual Studio for Mac. In order to do so, we realize the need to support various assistive technologies. We’ve continued to make improvements to accessibility over the entire surface area of the IDE. Some of these efforts include:
Refining focus order when navigating with assistive technologies
Increasing color contrast ratios for text and icons
Eliminating keyboard traps that hinder navigation of the IDE
More accurate VoiceOver reading and navigation
Rewriting inaccessible components of the IDE with accessibility in mind
Despite the work we’re doing to make Visual Studio for Mac accessible to all, we know there’s still a long journey ahead of us and no end of the road when it comes to making the IDE a delightful experience for all. This has been and will continue to be a top priority for our team and we welcome any and all feedback from our users that will assist in guiding this work. Please reach out directly to me via dominicn@microsoft.com if you’d like to engage with us directly on our accessibility work. I’d look forward to learning from those of you who reach out.
Speaking about feedback from our community, let’s move on to ASP.NET Core Scaffolding…
Speed up your web app development with ASP.NET Core Scaffolding
A top ask from our community has been to add ASP.NET Core Scaffolding to Visual Studio for Mac. We’ve taken that feedback and have now enabled Scaffolding for ASP.NET Core projects in Visual Studio for Mac. Scaffolding makes ASP.NET Core app development easier and faster by generating boilerplate code for common scenarios.
To use the new Scaffolding feature in Visual Studio for Mac, click on the New Scaffolding entry in the Add flyout of the project context menu. The node on which you opened the right-click context menu will be the location where the generated files will be placed.
You’ll then see a Scaffolding wizard to help you generate code into your project. In the image below, I’m using one of our ASP.NET Core sample projects – a movie database app – to demonstrate scaffolding in action. I’ve used the tool to make pages for Create, Read, Update, and Delete operations (CRUD) and a Details page for the movie model.
Once the wizard closes, it will add required NuGet packages to your project and create additional pages, based on the scaffolder you chose.
If you’re new to Scaffolding ASP.NET Core projects, take a look at our documentation for more information.
Xamarin Pair to Mac considerations
Developers using Visual Studio 2019 for Mac version 8.3 with Visual Studio 2019 version 16.4 for iOS development with Xamarin will see the following warnings in Windows:
If you agree to continue, the Mono and Xamarin.iOS SDKs on your Mac will be updated to the latest versions. While we recommend updating to Visual Studio 2019 for Mac 8.4 Preview 4 to avoid version mismatches when working with Xamarin on Windows, updating by clicking through the warnings shown above will allow you to continue to work without moving from the Stable channel on Mac.
We plan to release Visual Studio for Mac version 8.4 to Stable in early January and appreciate your patience with this experience and the workaround until then.
As always, if you have any feedback on this, or any, version of Visual Studio for Mac, we invite you to leave them in the comments below this post or to reach out to us on Twitter at @VisualStudioMac. If you run into issues while using Visual Studio for Mac, you can use Report a Problem to notify the team. In addition to product issues, we also welcome your feature suggestions on the Visual Studio Developer Community website.
Find in Files is one of the most commonly used features in Visual Studio. It’s also a feature that gets a substantial amount of feedback, and due to the age of the code, has been very costly to improve. Earlier this year, we decided to reimplement the feature from the ground up in order to realize significant performance and usability improvements.
We’ve released the new find in files experience in Visual Studio 2019 version 16.5 Preview 1 and we’re looking for feedback from the community. We expect this experience to be the one our developers will use and love in the future, so we want to make sure we’ve prioritized the right features. We still have more improvements coming that we’re not quite ready to talk about yet, but before we deprecate the old experience, we want to make sure the new version is meeting the needs of our users.
The new experience is available by searching for “Find in Files” or “Replace in Files” in Visual Studio search (Ctrl+Q by default). You can also get to these commands with Ctrl+Shift+F and Ctrl+Shift+H respectively. The new experience is pictured above and should be easily recognized by the more modern look and consistent color theming.
If you’re not seeing the new version, you can search for “Preview Features” in Visual Studio search (Again, Ctrl+Q by default). On that page, make sure “Use previous Find in Files” is unchecked. Conversely, if you’re having problems with the new experience, you can toggle this option to enable the old one. If you do find that you need the old Find in Files experience, we’d love to hear why. Please feel free to supply any feedback you might have over in Developer Community.
Performance
We took the previous implementation of Find in Files and reimplemented it completely in managed C#. This allows us to avoid unnecessary interop calls and gives us much more room for improving the experience. The memory consumption is smaller, and our performance is much faster.
In our internal testing on directories containing 100k+ files, we saw searches that took over 4 minutes with the old implementation be done in 26 seconds. The biggest gains are in searches that use regular expressions, but searches without regular expressions generally cut the search time in half.
Specifying Paths
Using the new experience should feel comfortable for most folks since we’ve gone with an experience that matches many other common find experiences. There are a few nuances that are worth calling out.
The “Look in” box has a new option, “Current Directory”, which will search the folder that contains the currently open document. When searching a solution, there are checkboxes to include miscellaneous files (files that you’ve opened but aren’t part of the solution) as well as external items (files like “windows.h” that you might reference but aren’t part of the solution).
The three dots button next to the “Look in” box work like any other browse option to specify a directory to look in, but if you’ve already specified a directory, this button will append the new directory instead of replacing. For instance, if your “Look in” value was “.\Code”, you could click the three buttons and navigate to a folder named “Shared Code”. The “Look in” would now show “.\Code;.\Shared Code” and when the Find command is executed, it will search both of those folders.
The File types folder now also can exclude files. Any path or file type prefixed with the “!” character will be excluded from the search. For instance, you can add “!*\node_modules\*” to the file types list to exclude any files in a node_modules folder.
Multiple Searches
One of the more frequent requests we’ve gotten is the ability to keep the results from one search while doing other searches. This makes it easy to compare results and see them side-by-side. This feature has been in Visual Studio for a while, and the new experience still supports it.
In the screenshot above, the Keep Results button has been enabled. Now, when a new search is executed, the results will be shown in a new tab. The screenshot above shows three searches that have already completed. Currently, this feature supports up to five searches. If you’ve already got five search results showing, the next search will reuse the oldest search result tab.
The Keep Results button is available for Find in Files as well as the Find All References feature.
Regular Expression Builder
With Visual Studio 2019 version 16.5 preview 2, the Regular Expression builder will be available. The “Use regular expressions” checkbox will enable you to specify a regular expression as a pattern for a match. Checking this box with Visual Studio 2019 version 16.5 preview 2 (or later) will also bring up the Regular Expression builder, which is useful for creating regular expressions. Regular expressions can allow searches for strings that span multiple lines. For instance, the expression “.*Hello.*\r\n.*World.*” will match any occurrence of the string “Hello” that has an occurrence of the string “World” anywhere on the next line.
When the “Use regular expressions” checkbox is checked, the regular expression builder will appear next to the Find field. Clicking this will give some examples for building regular expressions as well as a link to the documentation.
What’s Next
Now that the Find in Files experience has been reimplemented to use the newer patterns of Visual Studio, we’re going to be able to provide more of the features we get asked for. We’d love to hear your experiences with the new dialog. We’re always watching Developer Community, and we’ve got a survey specifically for collecting feedback on the new experience that you can answer here. We know there are features that aren’t available today and your feedback is how we’ll prioritize the rest of the features. If you’re running into problems or you think the new dialog isn’t working correctly, please send us feedback with the Give Feedback button in Visual Studio.
Last month, we kicked-off a challenge for our developer community to build a solution using ASP.NET Core and the new .NET Core features in Visual Studio for Mac. We were delighted to hear from so many of you and we were excited to receive many projects built from scratch using some of the control libraries we highlighted. Check out some of the submissions that came our way:
Thank you!
Thanks to all of you who took part in this challenge – we’re reaching out to get you the sweet, sweet swag that was mentioned as a perk of participating.
We’d also like to say thank you to the .NET Core component library partners that took part in this challenge by contributing licenses to the prize list and for their continued support of .NET Core developers on Mac:
The currently released Visual Studio for Mac v8.3 has full support for .NET Core 3.0. Our v8.4 release, now available in preview, adds support for .NET Core 3.1, Blazor, and ASP.NET Core scaffolding. You can read more about it in the announcement post from last week.
If you have any feedback on this, or any, version of Visual Studio for Mac, we invite you to leave them in the comments below this post or to reach out to us on Twitter at @VisualStudioMac. If you run into issues while using Visual Studio for Mac, you can use Report a Problem to notify the team. In addition to product issues, we also welcome your feature suggestions on the Visual Studio Developer Community website.
What if the community of extension authors banded together to add powerful features to Visual Studio that made it easier to create extensions? What if those features could be delivered in individually released extensions, but joined by a single installation experience that allows the user to choose which of the features to install? That’s the idea behind Extensibility Essentials – an extension pack that ships community-recommended extensions for extension authors.
Extension authors are usually interested in improving their own tooling in Visual Studio – either by installing extensions created by others or by building some themselves. By banding together, we can create the best and most comprehensive tooling experience for extension authoring. So, let’s test that theory by creating a range of extensions published to the Marketplace under our own accounts, and reference them in Extensibility Essentials to provide a unified and simple installation experience.
The individual extensions can and probably should be single purpose in nature. This prevents feature-creep where additional features are added that may or may not be useful for extension authors. If additional features are not closely related to the extension, then simply create a new extension for them. That way it is up to the individual extension author to decide if they wish to install it. It is also crucial that the extensions follow all the best practices.
Once the individual extension is stable, it can be added to Extensibility Essentials.
The extension packExtensibility Essentials doesn’t do anything by itself. It is a barebone extension pack that just references the individual extensions. When installing the extension pack, the user can choose which of the referenced extensions to install. At the time of this writing, there are 9 individual extensions.
How the individual extensions are listed before installing
Ideas for new extensions can be centralized to the GitHub issue tracker. By collecting ideas in a central location, it provides a single location to comment on and potentially design features ahead of implementation.
The issue tracker is for both bugs and suggested features
It would be cool if…
So next time you’re sitting in Visual Studio working on an extension, think about what feature you’d like that would make you more productive. If you can’t think of a feature, but feel there is a scenario that is particularly problematic, then open a bug on the GitHub issue tracker and let other people try to figure out how an extension could perhaps solve the issue.
Thinking “it would be cool if…” is the first step to make it possible and with the Extensibility Essentials, it might be closer to becoming reality than imagined.
Does this idea resonate with you? Let me know in the comments.
Mads Kristensen, Senior Program Manager @mkristensen
Mads Kristensen is a senior program manager on the Visual Studio Extensibility team. He is passionate about extension authoring, and over the years, he’s written some of the most popular ones with millions of downloads.
In previous blog posts you have read about some of the ideas behind Q#, how it came into existence, and its development over the past year. You have read about quantum computing, quantum algorithms and what you can do with Q# today. With the end of the year approaching, there is only one more thing to cover: What is next?
This blog post is about our aspirations for the future and how you can help to accomplish them. It contains some of our visions going forward, and we would love to hear your thoughts in the comment section below.
Community
One of the most exciting things about Q# for us is the growing community around it. Being rooted in the principles of quantum mechanics, quantum computing tends to have this air of unapproachability to the “uninitiated”. However, quantum computing builds on the notion of an idealized quantum system that behaves according to a handful of fairly easy to learn principles. With a little bit of acquired background in linear algebra, some persistence, and patience when wrapping your head around how measurements work it is possible to get knee-deep into quantum algorithms reasonably quickly!
Of course, a couple of good blog posts on some of these principles can help. We strive to actively support you in the adventure of exploring quantum algorithms by providing materials that help you get started, like our growing set of quantum katas. Our arsenal of open source libraries provides a large variety of building blocks to use in your quest of harnessing the power of quantum. One of the main benefits of open source projects is being able to share your work with all the people brave enough to explore the possibilities that quantum has to offer. Share your progress and help others build on your achievements! Whether in kata or library form, we welcome contributions of any size to our repositories. Let us know how we can help to make contributing easier.
Exchange among developers is one of the most important aspects of software development. It is omnipresent and vital to building a sustainable environment around a particular toolchain and topic. Thankfully, modern technology has made that exchange a lot easier than when the first computer programmers started their careers. We intend to make full use of the power of the internet and give a voice and a platform for discussions on topics related to Q# and quantum computing to developers around the world. The Q# dev blog is part of this effort. Contact us or comment below if you have an idea for a blog post or would like to hear more about a specific topic related to Q#. Establishing good feedback channels is always a challenging endeavor and in particular for a small team like ours. We would like this place to become a source of knowledge and exchange, a place where you can find the latest news and voice your take on them.
Growth
This brings us back to our plans for Q#. We have built Q# to make quantum development easier and more accessible. Of course, there were also a couple of other considerations that have played into that decision. For instance, we are anticipating the need to automate what is largely done in manual labor today, e.g. qubit layout and gate synthesis that are often still done on a case-by-case basis for each program and targeted hardware. When is the last time you worried about how error correction works on the hardware your code gets executed on? With qubits being an extremely scarce resource, and the long-term ambition to use quantum computing to address the most computationally intensive tasks that cannot be tackled with current hardware, the optimization of large-scale quantum programs needs to be a priority. We chose to develop our own language in order to have full control and flexibility over what information is represented how, and when it is used during compilation in order to be able to support a modular and scalable software architecture for executing quantum programs. But that’s a tale for another time. What is important is that these considerations are key factors in how we design and develop the language going forward.
A programming language is more than just a convenient set of tools for expressing an algorithm. It shapes the way that we think and reason about a problem, how we structure it and break it down into tasks when building a solution. A programming language can have a tremendous impact on our understanding of existing approaches, as well as how to adapt and combine them for our purposes. Particularly so when venturing into new territory.
Our goal is therefore to build a shared understanding of what it is we strive to accomplish, and to evolve Q# into the powerful language needed to drive progress in quantum programming. Our goal is to leverage the expertise of a community of language designers, compiler veterans, quantum physicists, algorithms and hardware experts, and a variety of software developers to shape a new kind of computing architecture. And we want you to be part of it.
Transparency
Since our 0.3 release at the beginning of November we have been eagerly working on not just the next release, but on defining and preparing the next steps in 2019. While we are in the middle of formulating our plans for the future, I want to give you a brief insight into some of our considerations.
As I am sure you have noticed, the support for data structures in Q# is minimal. While we do provide quite a few high-level language features for abstracting classical and quantum control flow, we intentionally omit some of the more object-oriented mechanisms such as classes. We anticipate remaining heavily focused on transformations that modify the quantum state, expressed as operations in Q#, as well as their characteristics and relations in the future. However, basic bundling of data and manipulations of such is of course an important aspect of many programs and we want to provide suitable mechanisms to express these in a way that allows to make abstractions, is convenient, and is resistant to coding errors. User defined types in the current setting have limited power besides an increased type safety. The “black box approach” to type parameterization currently restricts their usefulness; we do not provide a mechanism for dynamic reflection and it is not possible to apply operators or other type specific functionalities to argument items whose type is resolved for each call individually. In that sense, these items are “black boxes” that can merely be passed around. We want to do as much of the heavy lifting as possible statically in particular since debuggability of quantum devices is a huge challenge. There are several mechanisms one might consider alleviating the consequences of these decisions. On one hand, type constraints are a common mechanism used in several popular languages. In a sense, they can be seen as “specializations based on the properties of a type”. One could also pursue the stricter path of specializing based on the concrete type itself, de-facto adding a form of overloading that we currently explicitly prevent from being used. Either way, by clearly separating user defined types from tuples in the type system we have made a first step towards extending their power.
If you are curious to hear more about possible ideas for Q#, their benefits and caveats, or want to share some thoughts of your own, comment below! Contribute to the discussion and post your speculations to the question: What makes a quantum programming language “quantum”, i.e. what makes it particularly suited for quantum computing?
Join us
I hope you join us into a new year of pushing the boundaries of computation by participating in our coding competitions, contributing to our open source repositories, commenting on or writing blog posts and sharing your ideas and experiences!
How about a new year’s resolution of your own? Let us know what you expect to accomplish and how we can help you achieve your new year’s resolution around quantum programming in Q#!
Bettina Heim, Senior SDE, Quantum Software and Application @beheim
Bettina Heim is a quantum physicist and software engineer working in the Quantum Architectures and Computation Group at Microsoft Research. She is responsible for the Q# compiler and part of the Q# language design team. Prior to joining Microsoft she worked on quantum algorithms, adiabatic quantum computing, discrete optimization problems, and the simulation and benchmarking of quantum computing devices.