Back

Run & Debug a 20-Year-Old .NET Framework app from… a Mac?

Run & Debug a 20-Year-Old .NET Framework app from… a Mac?

I’ve spent the past few years on a shiny microservices stack project — Docker‑everything, cloud‑native, .NET versions on the cutting edge. macOS + Rider = bliss.

Then came the pivot: a legacy enterprise web app written in ASP.NET WebForms, running on IIS. Normally that means surrendering your Mac to Windows — complete with clunky keybinds, battery-draining inefficiencies, and every Windows quirk you’ve repressed since 2007 (oh and Microsoft copilot… on your keyboard). I begrudgingly switched… until JetBrains dropped a lifeline: Remote Development.

The Setup: A Windows VM Without the Suffering

I’d been tracking this feature before its early beta builds on YouTrack, refreshing the page like a kid waiting for Christmas. When it finally went public, I pounced.

Step 1: The Bare-Minimum Windows VM

First, I fired up a Windows 11 VM in Parallels (VirtualBox works too), enabled IIS and ASP.NET via Windows Features, and installed JetBrains Toolbox. Rider came next.

Install Windows 11 on a Mac with Apple silicon (https://kb.parallels.com/en/125375)

“This is where most guides stop,” I thought. Normally, you’d just run Rider or Visual Studio inside the VM, squinting at a laggy Windows UI. But why tolerate that when we can go full remote?


Step 2: Network stuff – SSH, Ports, and Avoiding Conflicts

SSH Keys First:

On Mac: ssh-keygen -t ed25519 (skip if you’ve done this before).

On the VM: Install OpenSSH Server via Windows Features, then paste your public key into C:\Users\vmuser\.ssh\authorized_keys.

Getting my SSH key from my Mac

Port forwarding for SSH.

  1. Go to Parallels Desktop > Devices > Network > Configure…
  2. Follow Advanced > Open Network Preferences > Port forwarding rules
  3. Set forward for Source=2222 → Destination=22

My Mac’s own SSH runs on port 22. By forwarding Mac port 2222VM port 22 in Parallels, I dodged conflicts. No sudo, no fuss.

Connecting to Windows VM through terminal first. Everything is working ✅

Step 3: JetBrains’ Remote Magic

Before you continue further, you need to turn off the Toolbox app on your Windows VM or you will not be able to connect to it.

In the Toolbox app on my Mac:

  1. Click the dropdown which currently has Local selected → SSH.
  2. Type vmuser@localhost:2222 (replace with your username)
Configure SSH connections in JetBrains toolbox
  1. Launch Rider.

The Big Reveal:

Rider’s UI runs natively on my Mac, but its backend — compilation, debugger, IIS environment — lives on the VM. It’s like outsourcing Windows’ dirty work.

SSH Connection status inside JetBrains Rider.

Running the System

First run

I tried just pressing the big green play button in the Rider’s toolbar, but after the app launched I remembered I cannot really access it due to it running in a separate virtual network device.

Port Forwarding

My app runs on IIS port 80, but macOS requires sudo to bind low ports. My fix: Forward Mac port 8000 → VM port 80 in Parallels.

With some tinkering you could probably get the ports 80/443 working as well, but for now this is a fine solution for me.

Debugging

First debug attempt: Nothing. Maybe it’s just when using IIS for running the app, maybe it’s due to some bug in the remote development. IIS spawns the process after Rider starts debugging. My fix is:

  1. Launch the app.
  2. In Rider: Attach to Processw3wp.exe (or something similar).
  3. Now all your breakpoints and console output will be available

Why Bother? (And Reality Checks)

For the stubborn: This setup feels like developing locally on a Mac. No VM UI lag, no Windows keybind amnesia.

For the pragmatic: It’s fragile. The client occasionally loses connection (especially after sleep), port forwarding can glitch, and the VM easily needs 8GB+ RAM. I’ve got 32GB on my MacBook, and even that can sometimes not be enough for all the development tools I use.


Final Thoughts

This isn’t about efficiency—it’s about preserving your workflow while dealing with legacy world of .NET. JetBrains hasn’t fixed .NET Framework, but they’ve let me debug them on my terms: far away from a power socket, with macOS shortcuts, and a cold drink in hand.

Next time, about those microservices…

Back
Do you have a project you need help with?
Get in Touch

By using this website, you agree to our use of cookies. We use cookies to provide you with a great experience and to help our website run effectively.

Accept