VB.NET Development and Migration
VB.NET is in a curious state. Microsoft has explicitly stopped evolving the language while continuing to support it on modern .NET. That is not deprecation, but it is also not investment. Anyone working with a VB.NET codebase today is operating in a stable, well-tooled, but feature-frozen lane — and the planning questions that come with that are very different from the ones facing a C# team.
A recurring theme in this collection is what is actually frozen versus what is merely unchanged. The runtime continues to improve underneath VB.NET code: JIT improvements, BCL additions, and SDK ergonomics all apply. What does not move is the language surface — no new syntax, no parity with the C# language working group’s output, no participation in the source-generator-and-records wave. Articles cover where that gap matters and where it is genuinely irrelevant for the workload the code is doing.
Migration to C# gets honest treatment. The automatic converters produce code that compiles and rarely produces code anyone wants to maintain. The harder cost is semantic: late binding, optional parameters with default values, the With block, error handling idioms, and the parts of Microsoft.VisualBasic that have no clean C# equivalent. Articles cover staged migration paths — interop boundaries, one-assembly-at-a-time conversions, and the cases where a full rewrite is genuinely cheaper than a port.
There are also workloads where VB.NET still makes sense and the article makes that case explicitly. A stable line-of-business application with a small maintenance team, a domain where the existing team is fluent, and a deployment target that is not changing — those are not situations that demand a migration on principle. The cost of churn is real.
Tooling notes round out the collection. Roslyn analyzers that work on VB.NET, the IDE features that have quietly fallen behind, and the build-system quirks that surface specifically in VB projects all get coverage where they affect real maintenance work.
