.NET 3 was a pretty big change, maybe the most significant change since the creation of Microsoft .NET Framework. It was fundamentally changed in ways that brought in many amazing features into the language. Here I will cover WPF, WF, WCF, and Auto-Implemented Properties.
The first change was WPF, which stands for Windows Presentation Foundation. This was a brand new UI framework for Windows, and it was a huge departure from the Windows UI that we were used to.
Before WPF, all Windows applications looked very similar. Remember all those gray dialog applications? Those were the original Windows UI, often called WinForms. I loved WinForms. It was extremely easy to work with and extremely fast to develop against. WPF was a huge shift, and it had a bunch of new features (you could build applications that were not gray!). It also had the best layout engine I have ever experienced in a UI framework. If you wanted to change the position of a button, doing so in WPF was extremely easy. But if you wanted to change the color of a third-party control, good luck. For that, you had to rewrite the entire template.
WPF was used extremely aggressively for a few years. Unfortunately, Microsoft quickly moved on from WPF and never really gave it the 2.0 version it needed. With the release of Windows 8, Microsoft basically moved past WPF. But WPF is still used today as Visual Studio is built using WPF.
WF is Workflow Foundation. This was my least favorite of all the changes in .NET 3. WF sounded amazing with its ability to “code” workflows without using code. But I learned a valuable lesson with WF. If you have developers, DO NOT USE GUI FOR CODE. It was a valuable lesson, and I will never use WF again. It was an extremely painful technology to live with from a variety of perspectives.
- The original creation of workflows took more time than just writing them in code.
- Maintaining these workflows was also slower to modify than just code.
- It didn’t version control very well. We found it difficult to deal with merge conflicts because they were basically a lot of XML.
And lastly, we ran into many weird build issues. Sometimes, builds would randomly fail because of a minor tweak made somewhere else.
WCF stands for Windows Communication Foundation. I will probably never build on this technology again, which is unfortunate because it was a great technology. WCF allowed for easy communication between multiple processes. It is effectively a legacy technology as it was not brought along with .NET Core.
Auto-Implemented Properties provided a way to quickly and easily add properties to a class. This eliminated a lot of unwanted/repeated code in our C# applications. Today, we cannot imagine life without this feature.
Microsoft .NET Framework 3 had some very big changes, but most of the ones talked about here are sort of behind us at this point except for Auto-Implemented Properties.
.NET Framework 2.0 (Generics, Partial Classes, Nullable Types, Anonymous Methods)
.NET Framework 3.0/3.5 (WPF, WF, WCF, Auto-Implemented Properties)
.NET Framework 3.0 (LINQ)
.NET Framework 3.5 SP1 (ADO.NET Entity Framework)
.NET Framework 4.0 (Parallel, Dynamic)
.NET Framework 4.5 (Async)
.NET Core 2.1/2.2 (expression-bodied members, Local functions, Async Main)
.NET Core 3.0/3.1/Framework 4.7 (New Start, Performance, Switch Statements, Tuples, readonly, Using)
.NET Core 5 (Merge, Record Types, Top Level Statements)