.NET Meteor Update - New Level of Productivity for .NET MAUI in VS Code
Tags: dotnet, vscode, mobile, maui
Published: 2024-04-01 08:16:44

&emsp;Hi .NET MAUI developers!

&emsp;I've been working with **.NET MAUI** since its initial preview versions and given the necessity to target both Android and iOS devices, I used Mac. At that time, **Visual Studio for Mac** was in the preview stage, so I decided to use **VS Code** and created an extension that helped me and my team build and debug .NET MAUI projects (yes, it was even before VS for Mac retirement). It became a lifesaver for me, so I published the extension as an open-source project - that's how **.NET Meteor** was born.

&emsp;It was a great pleasure to see that many MAUI developers started using it and sharing their positive feedback with me (If you don't know what .NET Meteor is, please take a look at [my first blog post](https://dev.to/nromanov/boost-net-maui-development-productivity-6-powerful-features-of-net-meteor-for-vs-code-in-windows-mac-linux-d0b) outlining its main features). Your positive feedback motivates me, and I continue to enhance .NET Meteor. In this blog post, I'll list new exciting features that hopefully will help you create even better MAUI apps :)

## Enhanced XAML Hot Reload
&emsp;If you are a .NET Meteor user, you know that it supports **XAML Hot Reload**. I enhanced its mechanism to support even more usage scenarios than Visual Studio (for Windows or Mac). Just keep the app running and continue editing your XAML to save your time for building and running the application.

![XAML Hot Reload](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jly3q79qdrpmigitrmlc.jpg)

## Performance & Memory Profiling (Trace, GCDump)
&emsp;Starting with version `4.0`, .NET Meteor can profile .NET applications with integrated .NET Diagnostics tools. You can use two profiling modes: - **Trace** to find performance bottlenecks. - **GCDump** to find memory leaks (as you may know, they cause performance issues, too).
 
&emsp;Here is a good article from my friend Alex at **DevExpress**: [How to Profile .NET MAUI Applications and Isolate Performance-Related Issues](https://community.devexpress.com/blogs/mobile/archive/2024/04/01/How-to-Profile-NET-MAUI-Applications-and-Isolate-Performance-Related-Issues.aspx). The blog post provides a step-by-step guide to profile and analyze your .NET MAUI app. Alex promised to publish another blog post about memory leaks, so stay tuned :)

![Profiling](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pqkpxp1y2f3cjp436lv2.jpg)

## Functional Breakpoints
&emsp;.NET Meteor supports already supported **Conditional breakpoints**, **HitPoints**, and **LogPoints**. Now you can use **Functional breakpoints** as well. Simply write a full method name and .NET Meteor will pause the application when this method is called. Moreover, you can set a condition or hit count to the functional breakpoint.

&emsp;We at DevExpress like to use this feature to find a method in the MAUI GitHub repository: it's sufficient to write its name and once the breakpoint is hit, you can debug the method. Since .NET Meteor downloads the source code via **SourceLink**, this becomes really straightforward.

![Functional Breakpoints](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fcuxj96i90826t1jeupj.jpg)

## Breakpoints Bound Status
&emsp;The new .NET Meteor version comes with enhanced breakpoint status visualization. It helps you determine that the breakpoint has been properly bound to the source code. Initially, breakpoints have an "Unbound" status (outlined in a transparent style in the VSCode window). When the Mono Runtime sets a breakpoint in the source code, you will see that the breakpoint will change its status to "Bound" (normal red style in the VSCode window).

![Breakpoint Status](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9slp8a3wdbx3doj34isr.jpg)

## Debug Console Completion Items
&emsp;As you may know, you can use the **Watch window** to evaluate expressions during debugging. Now you can additionally evaluate expressions in the VSCode **Debug Console**. The console has a completion item support when you type into it and .NET Meteor supports this feature as well. Note that along with public members, .NET Meteor displays private, protected, and internal members of your types.

![Completion Items](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ujhhuffay3xa8h782yjp.png)
&emsp;_Tip: you can use the ''!" filter string in the Debug Console window to hide all debug log messages._

## Integration with DotRush
&emsp;I didn't stop at Meteor and created another VS Code extension for an even better development experience - **DotRush**. My VS Code turned into a fully functional IDE, and I welcome you to try this extension as well. **DotRush** is a lightweight **C# language server** for VSCode. Actually, it's an analog of the standard **C# DevKit**, but it comes with some advanced capabilities. I will create a blog post about DotRush later, for now, you can learn what features it offers in the [GitHub repository description](https://github.com/JaneySprings/DotRush).

&emsp;When **DotRush** is used, .NET Meteor gets additional capabilities. For example, normally you cannot evaluate the `Application.Current.MainPage`, because .NET Meteor doesn't know about the `Application` type. However, when DotRush is used, .NET Meteor can ask it about unknown types and get all information for expression evaluation.

![Type Resolver](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hl4onwutw8gpc0r4fv1l.jpg)

---

## Conclusion
&emsp;The **.NET Meteor** and **DotRush** extension will help you focus on your app tasks by assisting you during development. Both extensions are open source and I really appreciate your feedback made through GitHub issues. Of course, if someone of you decides to collaborate on the codebase, I will be happy to consider your pull request. 

&emsp;If you like my projects, you may also want to check out the **free .NET MAUI controls** I'm working on as part of the **DevExpress** team: [Free .NET MAUI Controls](https://www.devexpress.com/maui). **I know that we can make MAUI great together!**