List of .NET libraries and frameworks

From Infogalactic: the planetary knowledge core
Jump to: navigation, search

This article contains a list of notable libraries that can be used in .NET languages. This article is not merely a list of other Wikipedia entries, but covers a topic that is important on its own right. While the .NET framework provides a basis for application development, which provides platform independence, language interoperability and extensive framework libraries, the whole development ecosystem around .NET is crucially dependent on a vast number of user libraries that are developed independently of the framework. The value of the framework for developers can not be estimated without having an overview of the user library ecosystem, including issues related to platform independence and licensing.

Standard Libraries (CLI) (including the Base Class Library (BCL) are not included in this article because they have a separate article.

Application development in .NET Framework

Programs written for .NET Framework execute in a software environment known as Common Language Runtime (CLR), an application virtual machine that provides services such as security, memory management, and exception handling. Framework includes a large class library called Framework Class Library (FCL), which together with CLR constitute the .NET framework.

Thanks to the hosting virtual machine, different .NET CLI compliant languages languages can operate on the same kind of data structures. Therefore, all CLI compliand languages can use the Framework Class Library and other .NET libraries that are written in one of the CLI compliant languages. When source code of a CLI copliant language is compiled, the compiler generates a platform independent code in the Common Intermediate Language (also referred to as bytecde), which is stored in CLI assemblies. When a .NET application is executed, the just-in-time compiler (JIT) turns the CIL code into platform specific machine code. To improve performance, the .NET Framework also comes with Native Image Generator (NGEN), which performs ahead-of-time compilation to machine code.

This architecture has several implications. The framework provides language interoperability (each language can use code written in other languages) across the .NET CLI compliant languages programming languages. Calls from one language to another are exactly the same as would be within a single programming language. If a library is written in one CIL language, it can be used in any other CIL language. Moreover, applications that consist only of pure .NET assemblies, can be transferred to any platform that contains implementation of .NET framework and executed on that platform. For example, an application written for Microsoft .NET on Windows can also be executed on Mono (a cross platform alternative implementation of .NET) on Linux of Mac OS. Such applications are automatically cross-platform (or platform independent) to the extent to which the .NET framework itself is ported to different platforms.

Ability to transfer applications across platforms is extremely important for software developers, because in this way they can use the same code base for the application on any platform, enabling code reuse and avoiding code duplication. Both lead to reduced development and maintenance costs.

However, platform independence is only guaranteed in the described way when none of the assemblies constituting an application depends on any code that is not pure .NET code. Many .NET libraries, however, make use of native libraries (written e.g. in C or C++) or system calls through interoperability mechanisms such as COM interoperability and the P/Invoke feature, which makes possible to call native code and thus call into libraries written in compiled languages (as opposed to managed) such as C or C++.

In these cases, platform independence of applications written for the .NET framework also depends on the ability to transfer non-.NET libraries, on which application depends, to target platforms. Any additional such library may add significantly to the effort necessary to transfer the application to other platforms. Sometimes, the best solution is to re-implement the parts of application that depend on such a library for each targeted platform. In many cases, the vast majority of the application's code base can be easily transferred across platforms, and only small specific portions of code dependent on problematic libraries must be re-implemented for each platform. Sometimes, a special compatibility layer is introduced that provides a uniform API to the platform dependent parts of code. Then, even if the higher level code heavily depends on platform dependent parts, dependence is resolved through API calls that are the same on all platforms, and the same high level code can still be used on different target platforms.

A notable example is the Windows Forms graphical (GUI) class library. The library provides access to Windows User Interface Common Controls by wrapping the Windows API in managed code.[1] The library is therefore not easily transferred to platforms other than Windows. In spite of that, the cross-platform .NET implementation Mono implements the library. Because of that, an application that depends on Windows Forms, can be ported to other forms by using the Mono runtime on which the Windows Forms library is implemented (beside Windows, this includes Unix and OSX). The Mono's implementation of the library is written in C# in order to avoid Windows dependence.[2] Most of the Windows Forms API works on Mono, except for some minor incompatibilities and implementation bugs. However, many .NET libraries that were written on Windows and depend on Windows Forms, also make direct P/Invoke calls straight to the Windows API and bypass the Windows Forms API (this is sometimes done to avoid limitations of the Windows Forms). Such libraries will be broken when transferred to platforms other than Windows, although Windows Forms itself is available on these platforms via Mono implementation. For a GUI class library, the Mono project endorses use of the GTK# library,[citation needed] which is a .NET binding for the Gtk+ toolkit written in C.

GUI libraries are not the only critical area of interest for .NET developers. Other libraries that may be problematic include 3D graphics libraries, sound and video libraries and device dependent libraries in general. While some areas are very well covered by core .NET libraries (such as database connectivity, file I/O, sockets, HTTP, XML manipulation, standard cryptography), the others (such as numerical libraries, general parsing libraries) are easy to implement in pure .NET but may be under represented as compared to availability of corresponding native libraries. For developers of both proprietary and open source software (including free software), licensing information is also critically important. Entries in the list therefore provide information about the scope of the listed libraries, main dependencies (especially when these affect platform dependence), and licensing information.

Historical background

The .NET Framework has for long supported cross-platform software development. The framework has been designed from the beginning for language interoperability, and parts of it were standardized in open standard (The Common Language Infrastcutrure and framework's most used programming language, C#). The original framework was first implemented only on Windows operating systems. Microsoft, the framework developer, and its partners, were working towards making their patents that cover some .NET - implemented technologies essential for framework implementation, available under "reasonable and non-discriminatory terms", which evolved into several patent promises issued by Microsoft. This made alternative third party implementations of the framework possible such as Mono, Portable.NET, and emulation CrossNet.[3]

In spite of that, it has long been a concern within the Open source community that using alternative .NET implementations for cross-platform development, especially of free software, is unsafe because of the possibility or Microsoft patent claims against such implementations. The Free Software Foundation's Richard Stallman has openly opposed inclusion of C# implementations in the default installation of GNU/Linux distributions and stated that they (the community) should discourage people from writing programs in C#. Primary concerns were parts of the framework implementations that were not subject to standards and were not explicitly included in Microsoft's patent promises.

The 2010s saw some significant shifts in Microsoft's approach towards the Open software community. The company open sourced the .NET Compiler Platform ("Roslyn") and the ASP.NET in April 20014, and later the .NET Core (open sourced on November 2014[4]) and other software. In February 2016, Microsoft acquired Xamarin, developer of Mono, an open source and cross platform implementation of .NET. On March 31, 2016 Microsoft announced at Microsoft Build that they will completely re-license Mono under the MIT license.[5] Microsoft issued the Patent Promise for Mono stating that they won't assert any "applicable patents" against parties that are "using, selling, offering for sale, importing, or distributing Mono".[6][7] It was also announced that the Mono Project was contributed to the .NET Foundation, a nonprofit organization established by Microsoft in March 2014 to improve open-source software development and collaboration around the .NET Framework.[8]

In light of these developments, a strong open source community has begun to develop around the .NET framework (especially on GitHub), starting a number of libraries and software projects[9] targeting the .NET framework for its cross platform character.

Libraries and frameworks

Lua error in package.lua at line 80: module 'strict' not found. This section lists a number of notable .NET libraries (both open source and proprietary) arranged by topics.

.NET Implementations and frameworks

Lua error in package.lua at line 80: module 'strict' not found. In this section, items are not sorted by name and are not divided to open/proprietary software.

Implementations:

  • .NET Core is an implementation of the core .NET Framework
  • Mono is a cross-platform implementation of the .NET Framework.

Frameworks:

  • C# Native compiles C# code to machine code.
  • SharpLang compiles C# and other .NET languages to native machine code, using LLVM as a backend.
  • Cosmos is a C# Open Source Managed Operating System, an operating system "construction kit".
  • Fling OS is a C#-based operating system designed for learning low-level development.
  • MOSA Project - Managed Operating System Alliance Project - a C# Operating System.

Numerical Libraries

<templatestyles src="Module:Hatnote/styles.css"></templatestyles>

Lua error in package.lua at line 80: module 'strict' not found.

Open Source Numerical Libraries

  • AForge.NET is a computer vision and artificial intelligence library. It implements a number of genetic, fuzzy logic and machine learning algorithms with several architectures of artificial neural networks with corresponding training algorithms.
  • ALGLIB is a cross-platform open source numerical analysis and data processing library. It consists of algorithm collections written in different programming languages (C++, C#, FreePascal, Delphi, VBA) and has dual licensing - commercial and GPL.
  • DiffSharp is an automatic differentiation library for exact and efficient calculation of derivatives. It includes symbolic and numerical differentiation. Released under GPLv3.[10]
  • FsAlg is a lightweight linear algebra library that supports generic types, implemented in F#. Released under the BSD License.[10]
  • IMSL Numerical Libraries for .NET is a commercial library of mathematical, statistical, data mining, financial and charting classes written in C#.
  • NeuronDotNet is a GPL-licensed artificial neural network library entirely written in C#. Because it only depends on the core .NET assemblies, it is easily portable across platforms.
  • suanshu.net by Numerical Method Inc. is a large collection of numerical algorithms including linear algebra, (advanced) optimization, interpolation, Markov model, principal component analysis, time series analysis, hypothesis testing, regressions, statistics, ordinary and partial differential equation solvers.
  • Math.NET Numerics aims to provide methods and algorithms for numerical computations in science, engineering and every day use. Covered topics include special functions, linear algebra, probability models, random numbers, interpolation, integral transforms and more. MIT/X11 license.[10]
  • Meta.Numerics is a library for advanced scientific computation in the .NET Framework.
  • The NAG Library for .NET is a collection of mathematical and statistical routines for Microsoft .NET.
  • NLinear is a generic linear algebra toolkit in C# compatible with Silverlight.

Proprietary Numerical Libraries

  • Alea GPU is a framework for developing GPU-accelerated algorithms in F# on .NET and Mono.[10]
  • ILNumerics.Net is a commercial high performance, typesafe numerical array classes and functions for general math, FFT and linear algebra, aims .NET/mono, 32&64 bit, script-like syntax in C#, 2D & 3D plot controls, efficient memory management. Released under GPLv3 or commercial license.[10]
  • Measurement Studio is a commercial integrated suite UI controls and class libraries for use in developing test and measurement applications. The analysis class libraries provide various digital signal processing, signal filtering, signal generation, peak detection, and other general mathematical functionality.
  • Microsoft Solver Foundation (MSF) is a .NET package for designing and optimizing mathematical models.[10]
  • NMath by CenterSpace Software: Commercial numerical component libraries for the .NET platform, including signal processing (FFT) classes, a linear algebra (LAPACK & BLAS) framework, and a statistics package.[10]
  • The Extreme Optimization Numerical Libraries for .NET are a commercial collection of mathematical and statistical classes for Microsoft .NET. It includes a large selection of standard algorithms from matrix factorization, function optimization, numerical integration, K-means clustering, and principal component analysis (PCA).[10]
  • suanshu.net by Numerical Method Inc. is a large collection of numerical algorithms including linear algebra, (advanced) optimization, interpolation, Markov model, principal component analysis, time series analysis, hypothesis testing, regressions, statistics, ordinary and partial differential equation solvers.

2D Graphics

Lua error in package.lua at line 80: module 'strict' not found.

Open Source 2D Graphics Libraries

  • NPlot [2] is a free, open source and cross platform charting library for .NET, released under the 3-clause-BSD license. Library includes classes for adding graphs to Windows Forms and ASP.NET, or to generate bitmaps.[11]
  • WebCharts [3] is a web control for creating charts that render as images(png, jpg, gif, etc.).[12]
  • ZedGraph [4] is a .NET 2D charting library for drawing line, bar, and pie Charts, released under the LGPL license. Library provides a high degree of flexibility, where very many aspects of how graphs will be displayed can be configured.[13][14][15][16]

Proprietary 2D Graphics Libraries

3D Graphics

Lua error in package.lua at line 80: module 'strict' not found.

Open Source 3D Graphics Libraries

  • ActiViz.NET consists of C# wrappers around the VTK library. The source code is released under the BSD license.[17]
  • Helix Toolkit is a 3D graphics toolkit that builds on and extends 3D capabilities of the WPF. Due to its dependence on WPF, the toolkit is limited to Windows platforms. It is released under the MIT license.

[18][19][20]

Proprietary 3D Graphics Libraries

Image Processing

Lua error in package.lua at line 80: module 'strict' not found.

Open Source Image Processing Libraries

  • AForge.NET is a computer vision and artificial intelligence library. It implements a number of image processing algorithms and filters. It is released under the LGPLv3 and partly GPLv3 license. Majority of the library is written in C# and thus cross-platform.[citation needed]
  • Accord.NET is another computer vision and artificial intelligence library, available under the Gnu Lesser Public License, version 2.1. It is mainly written in C#.

Proprietary Image Processing Libraries

Graphical User Interface Frameworks

Lua error in package.lua at line 80: module 'strict' not found.

Open Source GUI Frameworks

  • Gtk# are C# wrappers around the underlying GTK+ and GNOME libraries, written in C and available on Linux, MacOS and Windows.
  • QtSharp are C# bindings for the Qt framework.
  • Windows Forms is a Microsoft's GUI framework. The original Microsoft implementation runs on Windows operating systems and provides access to Windows User Interface Common Controls by wrapping the Windows API in managed code.[1] The alternative Mono's implementation is open source and cross-platform (it runs on Windows, this includes Unix and OS X). It is mainly compatible with the original implementation but not completely. The library is written in C# in order to avoid Windows dependence.[2]
  • Xwt is a GUI toolkit that maps API calls to native platform calls of the underlying platform, exposing one unified API across different platforms and making possible for the graphical user interfaces to have native look and feel on different platforms.

Proprietary GUI Frameworks

  • Windows Presentation Foundation (or WPF) is a graphical subsystem for rendering user interfaces in Windows-based applications by Microsoft. It is based on DirectX and employs XAML, an XML-based language, to define and link various interface elements.[25] WPF applications can be deployed as standalone desktop programs or hosted as an embedded object in a website.[citation needed]

Security and Identity Management

Lua error in package.lua at line 80: module 'strict' not found.

Open Source Security and Identity Management Libraries

Proprietary Security and Identity Management Libraries

Quality Assurance

Lua error in package.lua at line 80: module 'strict' not found.

Open Source Quality Assurance Libraries

Proprietary Quality Assurance Libraries

Object relational mapping

Lua error in package.lua at line 80: module 'strict' not found.

Open source object relational mapping tools

Proprietary object relational mapping tools

See also

Notes

References

  1. 1.0 1.1 C# 4.0 Unleashed By Bart De Smet. Sams Publishing, Jan 4, 2011 Chapter 5 [1]
  2. 2.0 2.1 Lua error in package.lua at line 80: module 'strict' not found.
  3. Lua error in package.lua at line 80: module 'strict' not found.
  4. Lua error in package.lua at line 80: module 'strict' not found.
  5. Lua error in package.lua at line 80: module 'strict' not found.
  6. Lua error in package.lua at line 80: module 'strict' not found.
  7. Lua error in package.lua at line 80: module 'strict' not found.
  8. Lua error in package.lua at line 80: module 'strict' not found.
  9. Lua error in package.lua at line 80: module 'strict' not found.
  10. 10.0 10.1 10.2 10.3 10.4 10.5 10.6 10.7 Lua error in package.lua at line 80: module 'strict' not found.
  11. Lua error in package.lua at line 80: module 'strict' not found.
  12. Lua error in package.lua at line 80: module 'strict' not found.
  13. Lua error in package.lua at line 80: module 'strict' not found.
  14. Lua error in package.lua at line 80: module 'strict' not found.
  15. Lua error in package.lua at line 80: module 'strict' not found.
  16. Lua error in package.lua at line 80: module 'strict' not found.
  17. Lua error in package.lua at line 80: module 'strict' not found.
  18. Lua error in package.lua at line 80: module 'strict' not found.
  19. Lua error in package.lua at line 80: module 'strict' not found.
  20. Lua error in package.lua at line 80: module 'strict' not found.
  21. Monogame at Build 2012 | Channel 9 Live at BUILD 2012 | Channel 9
  22. Lua error in package.lua at line 80: module 'strict' not found.
  23. Introducing Windows Presentation Foundation
  24. Lua error in package.lua at line 80: module 'strict' not found.
  25. MSDN.NET Development: WPF: XAML Overview
  26. Lua error in package.lua at line 80: module 'strict' not found.

External links

General:

Numerical libraries:

Data: