diff --git a/src/BlazorWorker.WorkerCore/BlazorWorker.WorkerCore.xml b/src/BlazorWorker.WorkerCore/BlazorWorker.WorkerCore.xml
index a090ef7..6a995f4 100644
--- a/src/BlazorWorker.WorkerCore/BlazorWorker.WorkerCore.xml
+++ b/src/BlazorWorker.WorkerCore/BlazorWorker.WorkerCore.xml
@@ -76,6 +76,15 @@
Mono-wasm-annotated endpoint for doing callbacks on self invocations from the worker. Experts only.
+
+
+ Sets environment variables in the target worker.
+
+
+ Defaults to a single entry: DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = '1'.
+ For more information see https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-environment-variables
+
+
Contains convenience extensions for
@@ -119,5 +128,17 @@
When this method has been called, can be used inside the service either by instanciating it or by injection into the constructor.
+
+
+ Set the specified to the specified when the worker runtime has been initialized
+
+
+
+
+
+
+ For more information see https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-environment-variables
+
+
diff --git a/src/BlazorWorker.WorkerCore/InitOptions.cs b/src/BlazorWorker.WorkerCore/InitOptions.cs
index 919d922..b5b8419 100644
--- a/src/BlazorWorker.WorkerCore/InitOptions.cs
+++ b/src/BlazorWorker.WorkerCore/InitOptions.cs
@@ -74,9 +74,28 @@ public WorkerInitOptions()
///
public string EndInvokeCallBackEndpoint { get; set; }
+ ///
+ /// Sets environment variables in the target worker.
+ ///
+ ///
+ /// Defaults to a single entry: DOTNET_SYSTEM_GLOBALIZATION_INVARIANT = '1'.
+ /// For more information see https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-environment-variables
+ ///
+ public Dictionary EnvMap { get; set; }
+ = new Dictionary() {
+ { "DOTNET_SYSTEM_GLOBALIZATION_INVARIANT", "1" },
+ };
+
public WorkerInitOptions MergeWith(WorkerInitOptions initOptions)
{
-
+ var newEnvMap = new Dictionary(this.EnvMap);
+ if (initOptions.EnvMap != null)
+ {
+ foreach (var entry in initOptions.EnvMap)
+ {
+ newEnvMap[entry.Key] = entry.Value;
+ }
+ }
return new WorkerInitOptions
{
CallbackMethod = initOptions.CallbackMethod ?? this.CallbackMethod,
@@ -87,7 +106,8 @@ public WorkerInitOptions MergeWith(WorkerInitOptions initOptions)
UseConventionalServiceAssembly = initOptions.UseConventionalServiceAssembly,
MessageEndPoint = initOptions.MessageEndPoint ?? this.MessageEndPoint,
InitEndPoint = initOptions.InitEndPoint ?? this.InitEndPoint,
- EndInvokeCallBackEndpoint = initOptions.EndInvokeCallBackEndpoint ?? this.EndInvokeCallBackEndpoint
+ EndInvokeCallBackEndpoint = initOptions.EndInvokeCallBackEndpoint ?? this.EndInvokeCallBackEndpoint,
+ EnvMap = newEnvMap
};
}
}
@@ -156,7 +176,7 @@ public static WorkerInitOptions AddHttpClient(this WorkerInitOptions source)
source.AddAssemblies("System.Net.Http.dll", "System.Net.Http.WebAssemblyHttpHandler.dll");
#endif
-#if NET5
+#if NET5_0_OR_GREATER
source.AddAssemblies(
"System.Net.Http.dll",
"System.Security.Cryptography.X509Certificates.dll",
@@ -169,5 +189,21 @@ public static WorkerInitOptions AddHttpClient(this WorkerInitOptions source)
return source;
}
+
+ ///
+ /// Set the specified to the specified when the worker runtime has been initialized
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// For more information see https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-environment-variables
+ ///
+ public static WorkerInitOptions SetEnv(this WorkerInitOptions source, string environmentVariableName, string value)
+ {
+ source.EnvMap[environmentVariableName] = value;
+ return source;
+ }
}
}
\ No newline at end of file
diff --git a/src/BlazorWorker.WorkerCore/SimpleInstanceService/SimpleInstanceService.cs b/src/BlazorWorker.WorkerCore/SimpleInstanceService/SimpleInstanceService.cs
index c9d53dd..bfc0e6e 100644
--- a/src/BlazorWorker.WorkerCore/SimpleInstanceService/SimpleInstanceService.cs
+++ b/src/BlazorWorker.WorkerCore/SimpleInstanceService/SimpleInstanceService.cs
@@ -231,7 +231,7 @@ private static InitInstanceResult InitInstance(long callId, string typeName, str
private static Assembly LogFailedAssemblyResolve(object sender, ResolveEventArgs args)
{
- Console.Error.WriteLine($"{typeof(SimpleInstanceService).FullName}: '{args.RequestingAssembly}' is requesting missing assembly '{args.Name}')");
+ Console.Error.WriteLine($"{typeof(SimpleInstanceService).FullName}: '{args.RequestingAssembly}' is requesting missing assembly '{args.Name}'). See https://github.com/Tewr/BlazorWorker#setup-dependencies for common solutions to this problem.");
//return null;
// Nobody really cares about this exception for now, it can't be caught.
diff --git a/src/BlazorWorker/BlazorWorker.js b/src/BlazorWorker/BlazorWorker.js
index 369c7c1..cc8e7fc 100644
--- a/src/BlazorWorker/BlazorWorker.js
+++ b/src/BlazorWorker/BlazorWorker.js
@@ -92,8 +92,15 @@ window.BlazorWorker = function () {
default: return fileName;
}
};
- module.onRuntimeInitialized = () =>
- MONO.mono_wasm_setenv('DOTNET_SYSTEM_GLOBALIZATION_INVARIANT', '1');
+ module.onRuntimeInitialized = () => {
+ const envMap = initConf.envMap;
+ for (const key in envMap) {
+ if (Object.prototype.hasOwnProperty.call(envMap, key)) {
+ MONO.mono_wasm_setenv(key, envMap[key]);
+ }
+ }
+ }
+
module.preRun.push(() => {
const mono_wasm_add_assembly = Module.cwrap('mono_wasm_add_assembly', null, [
'string',
@@ -269,6 +276,7 @@ window.BlazorWorker = function () {
endInvokeCallBackEndpoint: initOptions.endInvokeCallBackEndpoint,
wasmRoot: initOptions.wasmRoot,
blazorBoot: "_framework/blazor.boot.json",
+ envMap: initOptions.envMap,
debug: initOptions.debug
};