The .NET Framework is a development infrastructure that offers programmers a shared library of code known as the Framework Class Library (FCL), which makes it easier for developers to create applications. In addition, it also serves as a runtime environment called Common Language Runtime (CLR), allowing developers to write code in their preferred language, including Microsoft's C#, C++, F#, and Visual Basic, plus they can run it on any hardware that supports .NET. However, because of .NETs proprietary disposition, the platform ended up being mostly used to develop and run Windows-based applications.
In an effort to provide cross-platform support for .NET, a general purpose development platform called .NET Core has emerged. True to its name, .NET Core is an open source subset of .NET that shares the same APIs as the .NET Framework and contains the core features in terms of the runtime and libraries. It is supported and maintained by Microsoft and the .NET community, and is widely utilized to program cross-platform applications.
Being cross-platform, .NET Core allows developers to write code that requires little changes depending upon deployment environments including Windows, Mac, and Linux operating systems. Having the compiler and the runtime as separate components is perhaps the most innovative aspect of .NET Core.
.NET Core’s modular characteristic is largely in part due to its release through Microsoft’s NuGet package manager. Making .NET Core available as small, focused packages rather than one large assembly of its core attributes allows for more customization where programmers can include only the NuGet packages they require. This helps minimize the size and provides greater security plus better performance.
The flexibility for deployment in .NET Core basically allows two ways for developers to deploy their apps. The first is through framework-dependent deployment, which is the default deployment model, where only the application and its third-party dependencies are installed. Using this method, the package deployed is small, however, the app is only able to use the version of .NET Core that exists on the desired system, which can be different than the version it was originally built in.
The second way is through self-contained deployment where the .NET Core version used to build the app is deployed along with the app itself and its third-party dependencies. By doing this, you can assure that your targeted OS is able to run the app as the .NET Core version the app was built in is provided. Yet, deploying too many self-contained .NET Core apps can take up large amounts of disk space as each app would contain an entire copy of the .NET Core platform.
Despite its abilities, many do not consider .NET Core to be mature enough to use yet. It has been mentioned that its cross-platform capabilities for apps, which although compatible, are not always best suited to each platform due to the unique aspects of each operating system, at least for the time being.
The pre-release and current versions of .NET Core have had a significant and positive impact on many developers thanks to its modular and lean design, flexible deployment models, and open source status. These tools have simplified modern web development, and the community’s support for them ensures the potential for continued growth in the future.
Ultimately, developers can choose to wait for a more refined .NET Core or opt to use the current versions. However, with the assistance of third-party software technology experts who understand and actively follow these projects, programmers can rest assured the applications they create will be optimized for their intended environments.