Sign in

Gerald Versluis

@jfversluis.dev
2K followers 163 following 1.2K posts

Engineer @microsoft.com (.NET) | content creator | speaker | gamer | .NET MAUI, Blazor, C# | posts & opinions on personal title | He/Him | Talk about what you love, not what you don't. 📍 Maastricht, NL 🎥 YouTube.com/@jfversluis 🔌 jfversluis.dev

PostsRepliesMedia
Gerald Versluis @jfversluis.dev · 25/09/2026
.NET MAUI on iPhone Duo anyone? 👀
030
Gerald Versluis @jfversluis.dev · 15/09/2026
Your app feels slow. The process you are profiling might be innocent. This Visual Studio walkthrough separates CPU work from waiting, then finds 50 ms added to every streamed update. devblogs.microsoft.com/visualstudio…
Visual Studio Performance Profiler showing CPU usage results for a distributed .NET application.
010
Gerald Versluis @jfversluis.dev · 14/09/2026
That thing you learned the hard way? It might be a .NET Conf talk. Community Days CFP is open: remote 30-minute sessions, Nov 12-13. .NET 11 demos are preferred, but any useful .NET topic can be considered. Submit by Oct 6: sessionize.com/dotnetconf-community…
Official .NET Conf 2026 Community Days promotional banner.
001
Gerald Versluis @jfversluis.dev · 12/09/2026
Long press is built into .NET MAUI 11. This sample covers MinimumPressDuration, AllowableMovement, GestureStatus, commands, touch position, tap coexistence, and a two-finger iOS/Mac example. github.com/dotnet/maui-samples/tree…
Illustrated .NET MAUI 11 long-press sample card with a phone showing a press-and-hold box, completed status and coordinates, plus API notes for duration, movement, commands, position, and gesture lifecycle.
030
Gerald Versluis @jfversluis.dev · 11/09/2026
Which bug has a habit of waiting until after publish to show itself? Trimming, Native AOT, linker behavior, environment-specific configuration, signing, or path casing? What would you add to the list?
100
Gerald Versluis @jfversluis.dev · 11/09/2026
Friday .NET tip: scanning text for the same substrings repeatedly? Build SearchValues<string> once, then use ContainsAny. Need the position? Use IndexOfAny. .NET 9+, Ordinal or OrdinalIgnoreCase only. learn.microsoft.com/dotnet/api/syst…
C# code card showing a static SearchValues<string> containing error, fatal, timeout, and circuit open, reused with ContainsAny to scan each log line.
010
Gerald Versluis @jfversluis.dev · 10/09/2026
I'm live on .NET Unboxed right now, showing some of the new .NET MAUI 11 bits 🎁 The team is opening .NET 11 RC1, with Jon Galloway, Daniel Roth, Mads Torgersen, and more. Come hang out: www.youtube.com/watch?v=5fvi7m1QxIY
Official YouTube thumbnail for .NET Unboxed: .NET 11 Release Candidate 1.
030
Reposted by Gerald Versluis
.NET @dot.net · 10/09/2026
〰️ HAPPENING TODAY - .NET Unboxed: .NET 11 Release Candidate 1!! 〰️ Join the team LIVE as they show off their favorite features in .NET 11 in this release party for .NET 11 RC 1!! See you here at 11AM PT ➡️ msft.it/63320aXhLE
.NET 11 Release Candidate 1 is displayed prominently against a purple background. Two cartoon robots, one blue and one purple, stand next to a control panel, while a pink rocket with the number 11 is positioned to the right.
034
Gerald Versluis @jfversluis.dev · 10/09/2026
Oof that sucks
000
Gerald Versluis @jfversluis.dev · 10/09/2026
Yeah figured as much. Any idea on the new thing?
000
Gerald Versluis @jfversluis.dev · 10/09/2026
I’m surprised FireOS was supported to begin with 🤪 I mean with the power of AI we are able to move fast…
200
Gerald Versluis @jfversluis.dev · 10/09/2026
C# 15 preview lets break and continue target an enclosing labeled loop. That can remove a state flag or awkward goto from genuinely nested control flow. For a simple loop, keep it simple. devblogs.microsoft.com/dotnet/dotne…
C# 15 code example with two nested foreach loops. The outer loop is labeled scanRows, continue scanRows moves to the next row, and break scanRows exits both loops.
110
Gerald Versluis @jfversluis.dev · 10/09/2026
Per-solution themes make Visual Studio 2026 windows easy to spot. The useful part is settings.VisualStudio.json beside the solution. Commit it for team settings, or keep it personal with .gitignore. devblogs.microsoft.com/visualstudio…
Official Visual Studio image framed in a social card, showing two Visual Studio 2026 windows with contrasting color themes and notes about solution-scoped settings.VisualStudio.json.
020
Gerald Versluis @jfversluis.dev · 09/09/2026
Tomorrow I'm joining .NET Unboxed for .NET 11 RC1 🎁 I'll show some of the new .NET MAUI 11 bits, alongside Jon Galloway, Daniel Roth, Mads Torgersen, and more. Thursday, 20:00 CEST / 18:00 UTC www.youtube.com/watch?v=5fvi7m1QxIY Which MAUI 11 bit are you most curious about?
Official YouTube thumbnail for .NET Unboxed: .NET 11 Release Candidate 1.
000
Gerald Versluis @jfversluis.dev · 09/09/2026
A GitHub Actions job that only reads Dependabot alerts should not get unrelated token access. Use vulnerability-alerts read at job level. Once you specify permissions, omitted ones become none. docs.github.com/actions/reference/w…
Editor-style diagram showing a GitHub Actions job with the vulnerability-alerts GITHUB_TOKEN permission set to read, plus notes that omitted permissions become none and the permission accepts read or none.
010
Gerald Versluis @jfversluis.dev · 09/09/2026
Thanks! I'll have another look!
000
Gerald Versluis @jfversluis.dev · 09/09/2026
A green managed test run does not prove the Native AOT publish behaves the same. Keep the fast lane. Add one representative native test lane. Verify test count and outcomes. A passing subset is still a false green. MSTest 4.4: devblogs.microsoft.com/dotnet/mstes…
Official .NET Blog diagram showing familiar MSTest code moving through source generation, which creates a test registry, delegates, and roots, before producing a Native AOT test executable.
000
Gerald Versluis @jfversluis.dev · 08/09/2026
Ah any way you can easily dig that one up? Yeah feature parity with WPF is definitely not a goal for us, but anything we can do to make things easier between stacks should be something we should consider.
200
Gerald Versluis @jfversluis.dev · 08/09/2026
Feel free to open an issue with a spec that we can look at for .NET 12
100
Gerald Versluis @jfversluis.dev · 08/09/2026
We have been addressing a lot of those and even have an AI powered scanner now to look for those. If you have any to share that we still missed open issues and send them my way! I would think OpacityMasks might be something that’s not on all platforms? I’m not very familiar with them.
100
Gerald Versluis @jfversluis.dev · 08/09/2026
Content exclusions now carry into agentic work. The GitHub Copilot app and Copilot CLI keep excluded files out of context. Available for Copilot Business and Enterprise. github.blog/changelog/2026-09-02-co…
Official GitHub release graphic with a green shield-like GitHub mark and the text Content exclusions in the Copilot app and CLI, labeled new release.
000
Gerald Versluis @jfversluis.dev · 08/09/2026
Unfortunately not, those teams will have to provide their own implementations of this! But we’re happy to assist!
110
Gerald Versluis @jfversluis.dev · 08/09/2026
Stop creating every XAML resource at startup. .NET MAUI 11 XAML Source Generation turns dictionary entries into factories and creates them on demand. The benchmark shows up to ~8× faster dictionary initialization. No XAML rewrite. github.com/dotnet/maui/pull/33826
Diagram comparing eager creation of every .NET MAUI resource at startup with .NET MAUI 11 registering resource factories and creating each resource only when first requested, with up to roughly eight times faster ResourceDictionary initialization for large dictionaries.
130
Gerald Versluis @jfversluis.dev · 07/09/2026
The code is written. The PR still has review feedback, failed checks, and a merge conflict. VS Code 1.136 adds Agent Merge (preview). It can keep working through those blockers until the PR is ready. Which one would you hand off first? aka.ms/VSCode/136
VS Code Insiders Agents window with the Agent Merge menu open, showing options to address reviews, fix CI failures, resolve conflicts and behind branches, while automatic pull request merging is turned off.
000
Gerald Versluis @jfversluis.dev · 05/09/2026
MAUI Day Skopje is 12 days away 🇲🇰 September 17. One free, in-person day focused on .NET MAUI, with sessions, speakers, and plenty of time to talk with the community. If Skopje is within reach, go check it out: mauiday.net/skopje Anyone here joining?
Screenshot of the MAUI Day Skopje event page showing the September 17, 2026 date, MAUI Day Skopje badge, event description, and Get a Ticket and Submit a Talk buttons over a conference photo.
100
Gerald Versluis @jfversluis.dev · 04/09/2026
😭
010
Gerald Versluis @jfversluis.dev · 04/09/2026
September is here. What is the one thing you want to ship before the month is over? A feature, a release, an experiment, or that tiny fix that keeps getting bumped. What are you building?
310
Gerald Versluis @jfversluis.dev · 04/09/2026
One important detail: `Task.WhenEach` yields the completed tasks, not their results. Await each task inside the loop to get its result and observe exceptions. Would this replace a helper in your codebase?
000
Gerald Versluis @jfversluis.dev · 04/09/2026
Tasks rarely finish in the order you started them. Since .NET 9, `Task.WhenEach` lets you process them as they complete with `await foreach`. No `WhenAny` loop. No removing finished tasks yourself. learn.microsoft.com/dotnet/api/syst…
Side-by-side C# code comparison showing a manual Task.WhenAny loop that removes completed tasks and the shorter Task.WhenEach await foreach pattern, with reminders to process in completion order and await each task.
110
Gerald Versluis @jfversluis.dev · 03/09/2026
We're live! .NET MAUI meets GitHub Copilot Canvas 🤝 Join David Ortinau, Dominik Titl, and me as we inspect running MAUI apps, analyze layouts, record interactions as tests, and use captured evidence to diagnose failures. Watch now: www.youtube.com/watch?v=A5Pr5N999tc
Official thumbnail for the .NET MAUI Community Standup titled Inspect, Record, Create: .NET MAUI Meets GitHub Copilot Canvas, with portraits of Gerald Versluis, David Ortinau, and Dominik Titl.
010
Gerald Versluis @jfversluis.dev · 03/09/2026
Useful boundaries: it only affects capture, not pick operations. Windows and Tizen ignore it. On iOS and Mac Catalyst, add `NSPhotoLibraryAddUsageDescription` to Info.plist. Android before API 29 also needs `WRITE_EXTERNAL_STORAGE`. Would you enable it for every capture?
110
Gerald Versluis @jfversluis.dev · 03/09/2026
Capture it. Keep it. .NET MAUI 11 Preview 7 adds `SaveToGallery` for Media Picker photo and video capture. It is opt-in and works on Android, iOS, and Mac Catalyst. learn.microsoft.com/dotnet/api/micr…
Editorial-style .NET MAUI SaveToGallery flow showing a phone capturing media, an opt-in SaveToGallery toggle defaulting to false, and photos arriving in the gallery, with supported and unsupported platform notes.
131
Gerald Versluis @jfversluis.dev · 03/09/2026
Worktrees appear alongside your branches in the Git Repository window, branch picker, and repository picker. Stash and switch, or one worktree per task, which is your default?
000
Gerald Versluis @jfversluis.dev · 03/09/2026
Half-finished work, no stash required. Visual Studio 2026 now supports Git worktrees. Create one from a branch or commit, open it in a new window, and delete it when done. learn.microsoft.com/visualstudio/re…
Visual Studio Git Repository window for CalculatorApp showing worktrees alongside feature and fix branches, plus a detached worktrees section.
121
Gerald Versluis @jfversluis.dev · 02/09/2026
Tomorrow at 20:00 CEST / 18:00 UTC: .NET MAUI meets GitHub Copilot Canvas 🤝 Join David Ortinau, Dominik Titl, and me to see a tool inspect apps, analyze layouts, record interactions as tests, and capture evidence when things fail. www.youtube.com/watch?v=A5Pr5N999tc
Official thumbnail for the .NET MAUI Community Standup titled Inspect, Record, Create: .NET MAUI Meets GitHub Copilot Canvas, with portraits of Gerald Versluis, David Ortinau, and Dominik Titl.
000
Gerald Versluis @jfversluis.dev · 02/09/2026
Also new: resolving a Copilot review comment lets you choose Addressed, Won't fix, or Incorrect. That feedback goes back to the product team and helps improve the experience. Which update matters most in your repos?
000
Gerald Versluis @jfversluis.dev · 02/09/2026
One caveat for automatic reviews on bot-authored PRs: Copilot Business or Enterprise organizations need paid AI credits enabled, plus the policy allowing members without a Copilot license to use code review on GitHub.com. Usage is billed to the organization.
110
Gerald Versluis @jfversluis.dev · 02/09/2026
Bot PR or very large PR? Copilot code review covers both. Copilot cloud agent PRs now get full agentic reviews. The old 300-file / 20,000-line limit no longer applies. github.blog/changelog/2026-08-27-co…
GitHub pull request review menu for resolving a Copilot code review comment, with Addressed, Won't fix, and Incorrect options and short descriptions.
110
Gerald Versluis @jfversluis.dev · 02/09/2026
Supported edits include properties, bindings, resources, and adding, removing, or reordering child elements. Changing `x:Name` or the root type still needs page recreation. C# changes, files, and NuGet packages still need a rebuild. Useful, but still preview.
000
Gerald Versluis @jfversluis.dev · 02/09/2026
Your MAUI page can stay alive while its XAML changes underneath it. .NET MAUI 11 Preview 7's Incremental Hot Reload patches every live instance of an affected page or control. It works with `dotnet watch` too. devblogs.microsoft.com/dotnet/dotne…
Diagram showing a .NET MAUI XAML TextColor edit generating one patch that updates three live StatusCard instances without recreating their pages, with limitations for x:Name, root-type, C#, file, and NuGet changes.
120
Reposted by Gerald Versluis
Update Conference @updateconference.bsky.social · 01/09/2026
AI is everywhere. Useful #AI is harder to find. That’s why the AI sessions at #UCP26 focus on what really matters. Meet the speakers: 👉 @jfversluis.dev, @konradkokosa.bsky.social, Karl-Henrik Nilsson, @chrisnas.bsky.social, @kajetanduszynski.bsky.social 👉 prague.updateconference.net/en/2026/sche...
011
Gerald Versluis @jfversluis.dev · 01/09/2026
By default, VS Code shows up to two recently updated external sessions. Use the External filter or `chat.agentSessions.showExternal` to decide which ones appear. You need a Copilot subscription to continue in VS Code. Would this change how you use Copilot CLI?
100
Gerald Versluis @jfversluis.dev · 01/09/2026
Start in Copilot CLI. Continue in VS Code. VS Code 1.135 shows recent external Copilot sessions in the Sessions list. Open one to view the conversation and keep going. code.visualstudio.com/updates/v1_13…
Official VS Code 1.135 release graphic with the blue Visual Studio Code logo above the text "VS Code v1.135 New release" on a dark background.
100
Gerald Versluis @jfversluis.dev · 01/09/2026
I like this C# 15 preview feature: `closed` hierarchies. The compiler knows every direct subtype, so your switch can be exhaustive without a fallback. Add another subtype later and the switch is flagged for you. learn.microsoft.com/dotnet/csharp/l…
Blueprint-style C# 15 code card showing a closed PaymentResult record with sealed Success and Declined records, followed by an exhaustive switch expression with no default arm.
160
Gerald Versluis @jfversluis.dev · 31/08/2026
.NET Conf returns November 10-12! 🎉 Three days, free and online, with the official launch of .NET 11. The schedule is still coming together. For now, save the dates. What are you hoping to see this year? devblogs.microsoft.com/dotnet/dotne…
Official .NET Conf 2026 banner for the November 10-12 virtual event and launch of .NET 11.
100
Gerald Versluis @jfversluis.dev · 22/08/2026
Under the hood: one JSON file per app, automated link checks and duplicate detection, then an approved label adds the listing. The showcase itself is a Blazor WebAssembly static site on GitHub Pages.
010
Gerald Versluis @jfversluis.dev · 22/08/2026
Last week I said: send a PR to add your app to Built with .NET MAUI. You no longer need one. 😅 There is now a static showcase with search and filters, plus an issue form with automated validation. Huge shoutout to @james.montemagno.com! jfversluis.dev/built-with-maui
Screenshot of the new Built with .NET MAUI website showing 73 community apps, search and platform filters, and a grid of app cards in the dark theme.
141
Gerald Versluis @jfversluis.dev · 21/08/2026
That isn't just preference. .NET's design guidance says methods are preferable when access is slow, has side effects, depends on execution order, or can return a different result each time. learn.microsoft.com/dotnet/fundamen…
000
Gerald Versluis @jfversluis.dev · 21/08/2026
C# 14 adds extension properties. That's not permission to hide work as data. `customer.FullName`? Good fit. `customer.CustomerHistory` hitting a database? That's a method. Properties should feel field-like. Expensive work, side effects, and surprises belong in methods. Agree?
210
Gerald Versluis @jfversluis.dev · 21/08/2026
You define the event ID, level, template, and typed parameters on a partial method. The generator writes the implementation. Useful for request pipelines, queue processors, parsers, and loops. Normal `LogInformation` is still fine when the path is cold.
000