Deployment Guide
This guide documents the procedures for the deployment and configuration of applications built using Numerics.NET.
Redistributable files
The following files may be distributed as part of your application: All binary files (extension .dll) that are copied into your application's bin folder and its subfolders.
What to deploy
Not all redistributable files need to be installed with your application. In fact, most installations will require just the main assembly, with optionally two or three more native assemblies.
All installations require the Numerics.NET.dll assembly.
If you use single-precision linear algebra, or any of the classes that are specialized for single-precision floating-point numbers, you also require Numerics.NET.SinglePrecision.dll.
If you use linear algebra for elements other than single and double precision numbers, or any of the generic classes, you also require Numerics.NET.Generic.dll.
Numerics.NET also contains several sets of highly optimized native libraries built on Intel®’s Math Kernel Library.
You only need to deploy the assemblies you actually use. For example, most applications will not use any of the single precision types, and so won’t require the *.SinglePrecision.* assemblies. The native libraries only give an advantage when working with larger problems. If your problems are relatively small, the native libraries may be of little benefit to you and there is no reason to deploy them with your application.
P/Invoke based libraries
P/Invoke based libraries are written in native C++ and are called from managed code using Platform Invoke (P/Invoke).
The name of the dynamic link library is hard-coded in the main Numerics.NET assembly. For the library based on Intel's Math Kernel Library, the name is Numerics.NET.Native.Mkl. The extension is platform-dependent.
The single-precision native code is in the Numerics.NET.Mkl.SinglePrecision library. It requires the Numerics.NET.SinglePrecision assembly as well.
In addition, there is a shared threading library for the Intel Math Kernel Libraries called libiomp5md.dll.
All of these libraries must be deployed with your application. They are automatically pulled in by the NuGet packages.
Mixed-mode assemblies
Mixed-mode assemblies are written in C++/CLI and provide the best performance because of the minimal overhead when calling native code. Unfortunately, C++/CLI does not support spans, which are extensively used in the revised core API. As a result, mixed-mode assemblies are no longer supported.