Crate netcorehost[−][src]
Expand description
A Rust library for hosting .NET Core application.
This crate allows a .NET Core app to be run inside the current process or to load it and call a contained method directly.
Basic Usage
The first step is to load the hostfxr library with handles the hosting. This can be done with nethost::load_hostfxr()
which automatically locates the library on your system. The returned instance of Hostfxr
can then be used to initialize
a new HostfxrContext
through one of the initialize_*
methods like initialize_for_dotnet_command_line
which in turn be used to run the app associated with the context or to load a pointer to a function od the loaded library.
Examples
Running an application
Assuming the following app located inside the current folder and named Test.dll
:
public static class Program { public static int Main() { System.Console.WriteLine("Hello from C#!"); } }
The following code will setup the hostfxr library, load the app and run its Main
method.
let assembly_path = PdCString::from_str("./Test.dll")?; let hostfxr = nethost::load_hostfxr()?; let context = hostfxr.initialize_for_dotnet_command_line(assembly_path)?; let result = context.run_app();
Calling a managed function
Assuming the following app located inside the current folder and named Test.dll
:
namespace Test { public static class Program { public static int Hello(IntPtr arg, int argLength) { return 42; } } }
The following code will setup the hostfxr library, load the app and call the Hello
method.
The method has the default signature which avoids having to specify it. It accepts a ptr to some data and the size of said data.
let hostfxr = nethost::load_hostfxr()?; let context = hostfxr.initialize_for_runtime_config(PdCString::from_str("Test.runtimeconfig.json")?)?; let mut fn_loader = context.get_delegate_loader_for_assembly(PdCString::from_str("Test.dll")?)?; let hello = fn_loader.get_function_pointer_with_default_signature( PdCString::from_str("Test.Program, Test")?, PdCString::from_str("Hello")?, )?; let result = unsafe { hello(ptr::null(), 0) };
Alternatively it is possible to call a method with any signature if it is annotated with UnmanagedCallersOnly
(loaded with
get_function_pointer_for_unmanaged_callers_only_method
) or if the signature is passed to get_function_pointer
.
Modules
Module for the raw bindings for hostfxr and nethost.
Module for abstractions of the hostfxr library.
Module for abstractions of the nethost library.
Module for a platform dependent c-like string type.
Macros
Enums
An error struct encompassing all possible errors of this crate.