From efc73fbcff5bd8e8bc10974c58d2cc04ec6ef81c Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Mon, 30 Mar 2026 11:47:56 +0200 Subject: [PATCH 01/10] Remove licence headers + condense xml doc to RazorClassLib's ExampleJsInterop-like form. --- .../WebWorker-CSharp/WebWorkerClient.cs | 96 +++++-------------- .../wwwroot/dotnet-web-worker-client.js | 3 - .../wwwroot/dotnet-web-worker.js | 3 - 3 files changed, 24 insertions(+), 78 deletions(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs index a02d26ca7dbc..6ca68949560a 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs @@ -1,67 +1,32 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - using Microsoft.JSInterop; namespace Company.WebWorker1; -/// -/// Client for communicating with a Web Worker running .NET code. -/// -/// -/// -/// Worker methods are static methods marked with [JSExport] in a static partial class. -/// By default, they should be defined in the main application. The assembly name in -/// dotnet-web-worker.js must match the assembly containing the worker methods. -/// The project requires <AllowUnsafeBlocks>true</AllowUnsafeBlocks> in the .csproj file. -/// -/// -/// Due to [JSExport] limitations, worker methods can only return primitives or strings. -/// For complex types, serialize to JSON before returning—it will be automatically deserialized. -/// -/// -/// Example worker class (add this to your main app): -/// -/// [SupportedOSPlatform("browser")] -/// public static partial class MyWorker -/// { -/// [JSExport] -/// public static string Process(string input) => $"Processed: {input}"; -/// } -/// -/// -/// -/// Example usage: -/// -/// @inject IJSRuntime JSRuntime -/// -/// private WebWorkerClient? _worker; -/// -/// protected override async Task OnAfterRenderAsync(bool firstRender) -/// { -/// if (firstRender) -/// { -/// _worker = await WebWorkerClient.CreateAsync(JSRuntime); -/// } -/// } -/// -/// async Task CallWorker() -/// { -/// var result = await _worker!.InvokeAsync<string>("MyApp.MyWorker.Process", ["Hello"]); -/// } -/// -/// public async ValueTask DisposeAsync() => await (_worker?.DisposeAsync() ?? ValueTask.CompletedTask); -/// -/// -/// +// This class provides a client for communicating with a Web Worker running +// .NET code. The associated JavaScript module is loaded on demand when the +// worker is created. +// +// Worker methods are static methods marked with [JSExport] in a static partial +// class. Due to [JSExport] limitations, worker methods can only return primitives +// or strings. For complex types, serialize to JSON before returning — it will be +// automatically deserialized. +// +// Example worker class: +// +// [SupportedOSPlatform("browser")] +// public static partial class MyWorker +// { +// [JSExport] +// public static string Process(string input) => $"Processed: {input}"; +// } +// +// Example usage: +// +// var worker = await WebWorkerClient.CreateAsync(JSRuntime); +// var result = await worker.InvokeAsync("MyApp.MyWorker.Process", ["Hello"]); + public sealed class WebWorkerClient(IJSObjectReference worker) : IAsyncDisposable { - /// - /// Creates and initializes a new .NET Web Worker client instance. - /// - /// The JS runtime instance. - /// A ready-to-use WebWorkerClient instance. - /// Thrown if the worker fails to initialize. public static async Task CreateAsync(IJSRuntime jsRuntime) { await using var module = await jsRuntime.InvokeAsync( @@ -72,24 +37,11 @@ public static async Task CreateAsync(IJSRuntime jsRuntime) return new WebWorkerClient(workerRef); } - /// - /// Invokes a method on the worker and returns the result. - /// - /// The type of the result. - /// Full method path: "Namespace.ClassName.MethodName" - /// Arguments to pass to the method. - /// Token to cancel the operation. - /// The result from the worker method. - /// Thrown if the operation is canceled. - /// Thrown if the worker method throws an exception. public async Task InvokeAsync(string method, object[] args, CancellationToken cancellationToken = default) { return await worker.InvokeAsync("invoke", cancellationToken, [method, args]); } - /// - /// Terminates the worker and releases resources. - /// public async ValueTask DisposeAsync() { try @@ -98,7 +50,7 @@ public async ValueTask DisposeAsync() } catch (JSDisconnectedException) { - // Circuit disconnected, worker is already gone + // JS interop disconnected, worker is already gone } await worker.DisposeAsync(); diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js index c3f9ceba738e..6bb6f90a10a9 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js @@ -1,6 +1,3 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - class DotnetWebWorkerClient { #worker; #pendingRequests = {}; diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker.js b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker.js index f5fe5896c041..6a6923c50bf8 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker.js @@ -1,6 +1,3 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - let workerExports = null; let startupError = null; From 2119dd8fdaf80241dfc813bdfc9112ce105169b0 Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Mon, 30 Mar 2026 12:26:50 +0200 Subject: [PATCH 02/10] Add timeout to avoid init/invoke hangs. --- .../WebWorker-CSharp/WebWorkerClient.cs | 12 ++-- .../wwwroot/dotnet-web-worker-client.js | 55 ++++++++++++------- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs index 6ca68949560a..d5e7bd86edb8 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs @@ -27,19 +27,21 @@ namespace Company.WebWorker1; public sealed class WebWorkerClient(IJSObjectReference worker) : IAsyncDisposable { - public static async Task CreateAsync(IJSRuntime jsRuntime) + private const int DefaultTimeoutMs = 60000; + + public static async Task CreateAsync(IJSRuntime jsRuntime, int timeoutMs = DefaultTimeoutMs, CancellationToken cancellationToken = default) { await using var module = await jsRuntime.InvokeAsync( - "import", "./_content/Company.WebWorker1/dotnet-web-worker-client.js"); + "import", cancellationToken, "./_content/Company.WebWorker1/dotnet-web-worker-client.js"); - var workerRef = await module.InvokeAsync("create"); + var workerRef = await module.InvokeAsync("create", cancellationToken, timeoutMs); return new WebWorkerClient(workerRef); } - public async Task InvokeAsync(string method, object[] args, CancellationToken cancellationToken = default) + public async Task InvokeAsync(string method, object[] args, int timeoutMs = DefaultTimeoutMs, CancellationToken cancellationToken = default) { - return await worker.InvokeAsync("invoke", cancellationToken, [method, args]); + return await worker.InvokeAsync("invoke", cancellationToken, [method, args, timeoutMs]); } public async ValueTask DisposeAsync() diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js index 6bb6f90a10a9..8ae8875e4b77 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js @@ -1,3 +1,9 @@ +function withTimeout(promise, timeoutMs, timeoutMessage) { + const timeout = new Promise((_, reject) => + setTimeout(() => reject(new Error(timeoutMessage)), timeoutMs)); + return Promise.race([promise, timeout]); +} + class DotnetWebWorkerClient { #worker; #pendingRequests = {}; @@ -7,29 +13,30 @@ class DotnetWebWorkerClient { this.#worker = worker; } - static create() { - return new Promise((resolve, reject) => { - const worker = new Worker('_content/Company.WebWorker1/dotnet-web-worker.js', { type: "module" }); - - worker.addEventListener('error', (e) => { - reject(new Error(e.message || 'Worker encountered an error')); - }); + static create(initTimeoutMs) { + const worker = new Worker('_content/Company.WebWorker1/dotnet-web-worker.js', { type: "module" }); + const initWorker = new Promise((resolve, reject) => { + worker.addEventListener('error', (e) => + reject(new Error(e.message || 'Worker encountered an error'))); worker.addEventListener('message', function onMessage(e) { if (e.data.type === "ready") { worker.removeEventListener('message', onMessage); - if (e.data.error) { - reject(new Error(e.data.error)); - } else { - const client = new DotnetWebWorkerClient(worker); - client.#setupMessageHandler(); - resolve(client); - } + e.data.error ? reject(new Error(e.data.error)) : resolve(); } }); + }); + + const dotnetJsUrl = DotnetWebWorkerClient.#resolveDotnetJsUrl(); + worker.postMessage({ type: 'init', dotnetJsUrl }); - const dotnetJsUrl = DotnetWebWorkerClient.#resolveDotnetJsUrl(); - worker.postMessage({ type: 'init', dotnetJsUrl }); + return withTimeout(initWorker, initTimeoutMs, 'Worker initialization timed out').then(() => { + const client = new DotnetWebWorkerClient(worker); + client.#setupMessageHandler(); + return client; + }, err => { + worker.terminate(); + throw err; }); } @@ -40,12 +47,20 @@ class DotnetWebWorkerClient { return import.meta.resolve?.(dotnetJsUrl) ?? dotnetJsUrl; } - invoke(method, args) { - return new Promise((resolve, reject) => { + invoke(method, args, timeoutMs) { + const invoke = new Promise((resolve, reject) => { const id = ++this.#requestId; this.#pendingRequests[id] = { resolve: r => resolve(this.#parseIfJson(r)), reject }; this.#worker.postMessage({ method, args, requestId: id }); }); + + return withTimeout(invoke, timeoutMs, `Worker method '${method}' timed out`).catch(err => { + const id = this.#requestId; + if (this.#pendingRequests[id]) { + delete this.#pendingRequests[id]; + } + throw err; + }); } #parseIfJson(value) { @@ -93,6 +108,6 @@ class DotnetWebWorkerClient { } } -export function create() { - return DotnetWebWorkerClient.create(); +export function create(initTimeoutMs) { + return DotnetWebWorkerClient.create(initTimeoutMs); } From 4d00bab946bb1f8cfafe3abc2816fc8d67d95401 Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Mon, 30 Mar 2026 13:02:13 +0200 Subject: [PATCH 03/10] Avoid changing return type when string looks like a valid JSON but is in fact a primitive value. --- .../WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js index 8ae8875e4b77..2abed5de0fad 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js @@ -66,7 +66,10 @@ class DotnetWebWorkerClient { #parseIfJson(value) { if (typeof value === 'string') { try { - return JSON.parse(value); + const parsed = JSON.parse(value); + if (typeof parsed === 'object' && parsed !== null) { + return parsed; + } } catch { // not JSON, return as-is } From 036d9cf52352371b3307d24ffdcabde577ecf4f8 Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Mon, 30 Mar 2026 13:09:39 +0200 Subject: [PATCH 04/10] Blazor interop has invoke void method equivalent, template should cover it. --- .../content/WebWorker-CSharp/WebWorkerClient.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs index d5e7bd86edb8..bad1d4df3f95 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs @@ -44,6 +44,11 @@ public async Task InvokeAsync(string method, object[] args, in return await worker.InvokeAsync("invoke", cancellationToken, [method, args, timeoutMs]); } + public async Task InvokeVoidAsync(string method, object[] args, int timeoutMs = DefaultTimeoutMs, CancellationToken cancellationToken = default) + { + await worker.InvokeVoidAsync("invoke", cancellationToken, [method, args, timeoutMs]); + } + public async ValueTask DisposeAsync() { try From ab49dc80267422b6e5baa6fc7c53f3943c27d907 Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Wed, 1 Apr 2026 13:17:04 +0200 Subject: [PATCH 05/10] Feedback: symmetric treating input and output. --- .../content/WebWorker-CSharp/WebWorkerClient.cs | 5 ++--- .../wwwroot/dotnet-web-worker-client.js | 16 +--------------- 2 files changed, 3 insertions(+), 18 deletions(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs index bad1d4df3f95..120a09552b7d 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs @@ -7,9 +7,8 @@ namespace Company.WebWorker1; // worker is created. // // Worker methods are static methods marked with [JSExport] in a static partial -// class. Due to [JSExport] limitations, worker methods can only return primitives -// or strings. For complex types, serialize to JSON before returning — it will be -// automatically deserialized. +// class. [JSExport] methods can only accept and return primitives or strings. +// For complex types, serialize/deserialize manually with JsonSerializer. // // Example worker class: // diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js index 2abed5de0fad..92488a5b4b06 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js @@ -50,7 +50,7 @@ class DotnetWebWorkerClient { invoke(method, args, timeoutMs) { const invoke = new Promise((resolve, reject) => { const id = ++this.#requestId; - this.#pendingRequests[id] = { resolve: r => resolve(this.#parseIfJson(r)), reject }; + this.#pendingRequests[id] = { resolve, reject }; this.#worker.postMessage({ method, args, requestId: id }); }); @@ -63,20 +63,6 @@ class DotnetWebWorkerClient { }); } - #parseIfJson(value) { - if (typeof value === 'string') { - try { - const parsed = JSON.parse(value); - if (typeof parsed === 'object' && parsed !== null) { - return parsed; - } - } catch { - // not JSON, return as-is - } - } - return value; - } - terminate() { this.#rejectAllPending("Worker terminated"); this.#worker?.terminate(); From bf9b18f16baa2a93ca34bf382465f82fd5b367e7 Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Wed, 1 Apr 2026 16:44:39 +0200 Subject: [PATCH 06/10] Feedback: docs update. --- .../WebWorker-CSharp/WebWorkerClient.cs | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs index 120a09552b7d..ac212f59d3ed 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs @@ -2,28 +2,6 @@ namespace Company.WebWorker1; -// This class provides a client for communicating with a Web Worker running -// .NET code. The associated JavaScript module is loaded on demand when the -// worker is created. -// -// Worker methods are static methods marked with [JSExport] in a static partial -// class. [JSExport] methods can only accept and return primitives or strings. -// For complex types, serialize/deserialize manually with JsonSerializer. -// -// Example worker class: -// -// [SupportedOSPlatform("browser")] -// public static partial class MyWorker -// { -// [JSExport] -// public static string Process(string input) => $"Processed: {input}"; -// } -// -// Example usage: -// -// var worker = await WebWorkerClient.CreateAsync(JSRuntime); -// var result = await worker.InvokeAsync("MyApp.MyWorker.Process", ["Hello"]); - public sealed class WebWorkerClient(IJSObjectReference worker) : IAsyncDisposable { private const int DefaultTimeoutMs = 60000; @@ -38,6 +16,9 @@ public static async Task CreateAsync(IJSRuntime jsRuntime, int return new WebWorkerClient(workerRef); } + // Invokes a [JSExport] method from the web worker. + // The method string is the fully qualified path: "AssemblyName.ClassName.MethodName". + // Arguments and return values must be primitive types or strings. public async Task InvokeAsync(string method, object[] args, int timeoutMs = DefaultTimeoutMs, CancellationToken cancellationToken = default) { return await worker.InvokeAsync("invoke", cancellationToken, [method, args, timeoutMs]); From 12814a0845768652164461072cd1e6ee373f0129 Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Thu, 2 Apr 2026 21:15:51 +0200 Subject: [PATCH 07/10] Rename to blazor web worker project + support JSExports defined in Web Worker project. --- ...sproj.in => BlazorWebWorker-CSharp.csproj.in} | 1 + .../Microsoft.DotNet.Web.ProjectTemplates.csproj | 2 +- .../.template.config/dotnetcli.host.json | 0 .../.template.config/ide.host.json | 0 .../.template.config/ide/icon.ico | Bin .../localize/templatestrings.cs.json | 10 ++++++++++ .../localize/templatestrings.de.json | 10 ++++++++++ .../localize/templatestrings.en.json | 4 ++-- .../localize/templatestrings.es.json | 10 ++++++++++ .../localize/templatestrings.fr.json | 10 ++++++++++ .../localize/templatestrings.it.json | 10 ++++++++++ .../localize/templatestrings.ja.json | 10 ++++++++++ .../localize/templatestrings.ko.json | 10 ++++++++++ .../localize/templatestrings.pl.json | 10 ++++++++++ .../localize/templatestrings.pt-BR.json | 10 ++++++++++ .../localize/templatestrings.ru.json | 10 ++++++++++ .../localize/templatestrings.tr.json | 10 ++++++++++ .../localize/templatestrings.zh-Hans.json | 10 ++++++++++ .../localize/templatestrings.zh-Hant.json | 10 ++++++++++ .../.template.config/template.json | 11 ++++++----- .../.template.config/templatestrings.json | 4 ++-- .../WebWorkerClient.cs | 7 +++++-- .../BlazorWebWorker-CSharp/WorkerMethods.cs | 15 +++++++++++++++ .../wwwroot/dotnet-web-worker-client.js | 9 +++++---- .../wwwroot/dotnet-web-worker.js | 8 ++++---- .../localize/templatestrings.cs.json | 10 ---------- .../localize/templatestrings.de.json | 10 ---------- .../localize/templatestrings.es.json | 10 ---------- .../localize/templatestrings.fr.json | 10 ---------- .../localize/templatestrings.it.json | 10 ---------- .../localize/templatestrings.ja.json | 10 ---------- .../localize/templatestrings.ko.json | 10 ---------- .../localize/templatestrings.pl.json | 10 ---------- .../localize/templatestrings.pt-BR.json | 10 ---------- .../localize/templatestrings.ru.json | 10 ---------- .../localize/templatestrings.tr.json | 10 ---------- .../localize/templatestrings.zh-Hans.json | 10 ---------- .../localize/templatestrings.zh-Hant.json | 10 ---------- 38 files changed, 171 insertions(+), 150 deletions(-) rename src/ProjectTemplates/Web.ProjectTemplates/{WebWorker-CSharp.csproj.in => BlazorWebWorker-CSharp.csproj.in} (90%) rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/.template.config/dotnetcli.host.json (100%) rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/.template.config/ide.host.json (100%) rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/.template.config/ide/icon.ico (100%) create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.cs.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.de.json rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/.template.config/localize/templatestrings.en.json (77%) create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.es.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.fr.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.it.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ja.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ko.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pl.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ru.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.tr.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/.template.config/template.json (82%) rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/.template.config/templatestrings.json (68%) rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/WebWorkerClient.cs (79%) create mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/WorkerMethods.cs rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/wwwroot/dotnet-web-worker-client.js (92%) rename src/ProjectTemplates/Web.ProjectTemplates/content/{WebWorker-CSharp => BlazorWebWorker-CSharp}/wwwroot/dotnet-web-worker.js (83%) delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.cs.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.de.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.es.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.fr.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.it.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ja.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ko.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.pl.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ru.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.tr.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json delete mode 100644 src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json diff --git a/src/ProjectTemplates/Web.ProjectTemplates/WebWorker-CSharp.csproj.in b/src/ProjectTemplates/Web.ProjectTemplates/BlazorWebWorker-CSharp.csproj.in similarity index 90% rename from src/ProjectTemplates/Web.ProjectTemplates/WebWorker-CSharp.csproj.in rename to src/ProjectTemplates/Web.ProjectTemplates/BlazorWebWorker-CSharp.csproj.in index 9ac781b4d9cc..721dc10d3b1c 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/WebWorker-CSharp.csproj.in +++ b/src/ProjectTemplates/Web.ProjectTemplates/BlazorWebWorker-CSharp.csproj.in @@ -4,6 +4,7 @@ ${DefaultNetCoreTargetFramework} enable enable + true diff --git a/src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj b/src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj index 741f01a3cee9..76e432d80a2d 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj +++ b/src/ProjectTemplates/Web.ProjectTemplates/Microsoft.DotNet.Web.ProjectTemplates.csproj @@ -64,7 +64,7 @@ - + diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/dotnetcli.host.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/dotnetcli.host.json similarity index 100% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/dotnetcli.host.json rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/dotnetcli.host.json diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/ide.host.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/ide.host.json similarity index 100% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/ide.host.json rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/ide.host.json diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/ide/icon.ico b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/ide/icon.ico similarity index 100% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/ide/icon.ico rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/ide/icon.ico diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.cs.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.cs.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.de.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.de.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.en.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.en.json similarity index 77% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.en.json rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.en.json index 8b69676dc1ee..2e1053d2cb59 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.en.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.en.json @@ -1,7 +1,7 @@ { "author": "Microsoft", - "name": ".NET Web Worker", - "description": "A project for creating a class library that runs .NET code in a Web Worker.", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.es.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.es.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.fr.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.fr.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.it.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.it.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ja.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ja.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ko.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ko.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pl.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pl.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ru.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ru.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.tr.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.tr.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json new file mode 100644 index 000000000000..0618b4ebb175 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -0,0 +1,10 @@ +{ + "author": "Microsoft", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "symbols/Framework/description": "The target framework for the project.", + "symbols/Framework/choices/net11.0/description": "Target net11.0", + "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", + "postActions/restore/description": "Restore NuGet packages required by this project.", + "postActions/restore/manualInstructions/default/text": "Run 'dotnet restore'" +} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/template.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/template.json similarity index 82% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/template.json rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/template.json index 422f1dbc7bfe..5fbfe0e1e1ba 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/template.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/template.json @@ -3,17 +3,18 @@ "author": "Microsoft", "classifications": [ "Web", + "Blazor", "WebAssembly", "Worker", "Library" ], - "name": ".NET Web Worker", + "name": "Blazor Web Worker", "generatorVersions": "[1.0.0.0-*)", - "description": "A project for creating a class library that runs .NET code in a Web Worker.", - "groupIdentity": "Microsoft.Web.Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "groupIdentity": "Microsoft.Web.Blazor.WebWorker", "precedence": "10000", - "identity": "Microsoft.Web.Worker.Library.CSharp.10.0", - "shortName": "webworker", + "identity": "Microsoft.Web.Blazor.WebWorker.Library.CSharp.11.0", + "shortName": "blazorwebworker", "tags": { "language": "C#", "type": "project" diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/templatestrings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/templatestrings.json similarity index 68% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/templatestrings.json rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/templatestrings.json index c771640814c8..12558c179b3a 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/templatestrings.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/templatestrings.json @@ -1,7 +1,7 @@ { "author": "Microsoft", - "name": ".NET Web Worker", - "description": "A project for creating a class library that runs .NET code in a WebWorker, keeping your WebAssembly UI responsive during heavy computations.", + "name": "Blazor Web Worker", + "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker, keeping your WebAssembly UI responsive during heavy computations.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/WebWorkerClient.cs similarity index 79% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/WebWorkerClient.cs index ac212f59d3ed..6a3b1e107f89 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/WebWorkerClient.cs +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/WebWorkerClient.cs @@ -5,13 +5,16 @@ namespace Company.WebWorker1; public sealed class WebWorkerClient(IJSObjectReference worker) : IAsyncDisposable { private const int DefaultTimeoutMs = 60000; + private static readonly string DefaultAssemblyName = typeof(WebWorkerClient).Assembly.GetName().Name!; - public static async Task CreateAsync(IJSRuntime jsRuntime, int timeoutMs = DefaultTimeoutMs, CancellationToken cancellationToken = default) + public static async Task CreateAsync(IJSRuntime jsRuntime, int timeoutMs = DefaultTimeoutMs, string? assemblyName = null, CancellationToken cancellationToken = default) { await using var module = await jsRuntime.InvokeAsync( "import", cancellationToken, "./_content/Company.WebWorker1/dotnet-web-worker-client.js"); - var workerRef = await module.InvokeAsync("create", cancellationToken, timeoutMs); + var resolvedName = assemblyName ?? DefaultAssemblyName; + var options = new { assemblyName = resolvedName }; + var workerRef = await module.InvokeAsync("create", cancellationToken, timeoutMs, options); return new WebWorkerClient(workerRef); } diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/WorkerMethods.cs b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/WorkerMethods.cs new file mode 100644 index 000000000000..171b27758027 --- /dev/null +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/WorkerMethods.cs @@ -0,0 +1,15 @@ +using System.Runtime.InteropServices.JavaScript; +using System.Runtime.Versioning; + +namespace Company.WebWorker1; + +// Define [JSExport] methods here to run them in a Web Worker. +// Call them from your Blazor app using WebWorkerClient.InvokeAsync. +// Example: await worker.InvokeAsync("Company.WebWorker1.WorkerMethods.Greet", ["World"]); + +[SupportedOSPlatform("browser")] +public static partial class WorkerMethods +{ + [JSExport] + public static string Greet(string name) => $"Hello, {name}!"; +} diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker-client.js similarity index 92% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker-client.js index 92488a5b4b06..94ca9127ed8b 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker-client.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker-client.js @@ -13,7 +13,7 @@ class DotnetWebWorkerClient { this.#worker = worker; } - static create(initTimeoutMs) { + static create(initTimeoutMs, options = {}) { const worker = new Worker('_content/Company.WebWorker1/dotnet-web-worker.js', { type: "module" }); const initWorker = new Promise((resolve, reject) => { @@ -28,7 +28,8 @@ class DotnetWebWorkerClient { }); const dotnetJsUrl = DotnetWebWorkerClient.#resolveDotnetJsUrl(); - worker.postMessage({ type: 'init', dotnetJsUrl }); + const assemblyName = options?.assemblyName ?? null; + worker.postMessage({ type: 'init', dotnetJsUrl, assemblyName }); return withTimeout(initWorker, initTimeoutMs, 'Worker initialization timed out').then(() => { const client = new DotnetWebWorkerClient(worker); @@ -97,6 +98,6 @@ class DotnetWebWorkerClient { } } -export function create(initTimeoutMs) { - return DotnetWebWorkerClient.create(initTimeoutMs); +export function create(initTimeoutMs, options) { + return DotnetWebWorkerClient.create(initTimeoutMs, options); } diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker.js b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker.js similarity index 83% rename from src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker.js rename to src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker.js index 6a6923c50bf8..4800af70e39a 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/wwwroot/dotnet-web-worker.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker.js @@ -1,12 +1,12 @@ let workerExports = null; let startupError = null; -async function initialize(dotnetJsUrl) { +async function initialize(dotnetJsUrl, assemblyName) { try { const { dotnet } = await import(dotnetJsUrl); const { getAssemblyExports, getConfig } = await dotnet.create(); - const assemblyName = getConfig().mainAssemblyName; - workerExports = await getAssemblyExports(assemblyName); + const resolvedAssemblyName = assemblyName ?? getConfig().mainAssemblyName; + workerExports = await getAssemblyExports(resolvedAssemblyName); self.postMessage({ type: "ready" }); } catch (err) { const errorMessage = err?.message ?? String(err); @@ -18,7 +18,7 @@ async function initialize(dotnetJsUrl) { self.addEventListener('message', async (e) => { if (e.data.type === 'init') { - await initialize(e.data.dotnetJsUrl); + await initialize(e.data.dotnetJsUrl, e.data.assemblyName); return; } diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.cs.json deleted file mode 100644 index 7da3ea360b4a..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.cs.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": "Webový pracovní proces .NET", - "description": "Projekt pro vytvoření knihovny tříd, která spouští kód .NET ve webovém pracovním procesu", - "symbols/Framework/description": "Cílová architektura pro projekt.", - "symbols/Framework/choices/net11.0/description": "Cílový net11.0", - "symbols/skipRestore/description": "Je-li zadáno, při vytvoření přeskočí automatické obnovení projektu.", - "postActions/restore/description": "Obnovte balíčky NuGet vyžadované tímto projektem.", - "postActions/restore/manualInstructions/default/text": "Spustit „dotnet restore“" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.de.json deleted file mode 100644 index 001483cba952..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.de.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": ".NET-Worker", - "description": "Ein Projekt zur Erstellung einer Klassenbibliothek, die .NET-Code in einem Worker ausführt.", - "symbols/Framework/description": "Das Zielframework für das Projekt.", - "symbols/Framework/choices/net11.0/description": "Ziel net11.0", - "symbols/skipRestore/description": "Wenn angegeben, wird die automatische Wiederherstellung des Projekts beim Erstellen übersprungen.", - "postActions/restore/description": "Stellt die NuGet-Pakete wieder her, die für dieses Projekt erforderlich sind.", - "postActions/restore/manualInstructions/default/text": "„dotnet restore“ ausführen" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.es.json deleted file mode 100644 index ef913b6dbd55..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.es.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": "Trabajo web de .NET", - "description": "Proyecto para crear una biblioteca de clases que ejecuta código .NET en un trabajo web.", - "symbols/Framework/description": "Marco de destino del proyecto.", - "symbols/Framework/choices/net11.0/description": "Net11.0 de destino", - "symbols/skipRestore/description": "Si se especifica, se omite la restauración automática del proyecto durante la creación.", - "postActions/restore/description": "Restaure los paquetes NuGet necesarios para este proyecto.", - "postActions/restore/manualInstructions/default/text": "Ejecutar \"dotnet restore\"" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.fr.json deleted file mode 100644 index 00bcdd667b15..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.fr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": "Worker .NET", - "description": "Un projet de création d’une bibliothèque de classes qui exécute du code .NET dans un Web Worker.", - "symbols/Framework/description": "Infrastructure cible du projet.", - "symbols/Framework/choices/net11.0/description": "Net11.0 cible", - "symbols/skipRestore/description": "Si spécifié, ignore la restauration automatique du projet lors de la création.", - "postActions/restore/description": "Restaurer les packages NuGet requis par ce projet.", - "postActions/restore/manualInstructions/default/text": "Exécuter 'dotnet restore'" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.it.json deleted file mode 100644 index dbb5c17ddb4b..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.it.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": "Ruolo di lavoro .NET", - "description": "Progetto per creare una libreria di classi che esegue il codice .NET in un ruolo di lavoro.", - "symbols/Framework/description": "Framework di destinazione per il progetto.", - "symbols/Framework/choices/net11.0/description": "Destinazione net11.0", - "symbols/skipRestore/description": "Se specificato, ignora il ripristino automatico del progetto durante la creazione.", - "postActions/restore/description": "Consente di ripristinare i pacchetti NuGet richiesti da questo progetto.", - "postActions/restore/manualInstructions/default/text": "Esegui \"dotnet restore\"" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ja.json deleted file mode 100644 index 291e3470ca22..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ja.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": ".NET Web Worker", - "description": "Web worker で .NET コードを実行するクラス ライブラリを作成するためのプロジェクト。", - "symbols/Framework/description": "プロジェクトのターゲット フレームワーク。", - "symbols/Framework/choices/net11.0/description": "ターゲット net11.0", - "symbols/skipRestore/description": "指定した場合、作成時にプロジェクトの自動復元がスキップされます。", - "postActions/restore/description": "このプロジェクトに必要な NuGet パッケージを復元します。", - "postActions/restore/manualInstructions/default/text": "'dotnet restore' を実行する" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ko.json deleted file mode 100644 index a5c2aaba5ec0..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ko.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": ".NET 웹 작업자", - "description": "웹 작업자에서 .NET 코드를 실행하는 클래스 라이브러리를 만드는 프로젝트입니다.", - "symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.", - "symbols/Framework/choices/net11.0/description": "Target net11.0", - "symbols/skipRestore/description": "지정된 경우, 프로젝트 생성 시 자동 복원을 건너뜁니다.", - "postActions/restore/description": "이 프로젝트에 필요한 NuGet 패키지를 복원합니다.", - "postActions/restore/manualInstructions/default/text": "'dotnet restore' 실행" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.pl.json deleted file mode 100644 index 11025e02d651..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.pl.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": "Internetowy proces roboczy środowiska .NET", - "description": "Projekt służący do tworzenia biblioteki klas, która uruchamia kod środowiska .NET w internetowym procesie roboczym.", - "symbols/Framework/description": "Platforma docelowa dla tego projektu.", - "symbols/Framework/choices/net11.0/description": "Docelowa platforma net11.0", - "symbols/skipRestore/description": "Jeśli ta opcja jest określona, pomija automatyczne przywracanie projektu podczas tworzenia.", - "postActions/restore/description": "Przywróć pakiety NuGet wymagane przez ten projekt.", - "postActions/restore/manualInstructions/default/text": "Uruchom polecenie „dotnet restore”" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json deleted file mode 100644 index ab9de13b3d25..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": "Trabalho .NET", - "description": "Um projeto para criar uma biblioteca de classes que executa código .NET em um Trabalho.", - "symbols/Framework/description": "A estrutura de destino para o projeto.", - "symbols/Framework/choices/net11.0/description": "Net11.0 de destino", - "symbols/skipRestore/description": "Se especificado, ignora a restauração automática do projeto que está sendo criado.", - "postActions/restore/description": "Restaurar os pacotes NuGet exigidos por esse projeto.", - "postActions/restore/manualInstructions/default/text": "Execute 'dotnet restore'" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ru.json deleted file mode 100644 index 08f9f746b0ed..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.ru.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Майкрософт", - "name": "Рабочая роль .NET", - "description": "Проект по созданию библиотеки классов, которая выполняет код .NET в рабочей роли.", - "symbols/Framework/description": "Целевая платформа для проекта.", - "symbols/Framework/choices/net11.0/description": "Цель net11.0", - "symbols/skipRestore/description": "Если указано, пропускает автоматическое восстановление проекта при создании.", - "postActions/restore/description": "Восстановление пакетов NuGet, необходимых для этого проекта.", - "postActions/restore/manualInstructions/default/text": "Выполнить команду \"dotnet restore\"" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.tr.json deleted file mode 100644 index 181be5bce10f..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.tr.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": ".NET Web Çalışanı", - "description": "Web Çalışanı içinde .NET kodunu çalıştıran bir sınıf kitaplığı oluşturma projesi.", - "symbols/Framework/description": "Projenin hedef çerçevesi.", - "symbols/Framework/choices/net11.0/description": "Hedef net11.0", - "symbols/skipRestore/description": "Belirtilmişse oluştururken projenin otomatik geri yüklenmesini atlar.", - "postActions/restore/description": "Bu projenin gerektirdiği NuGet paketlerini geri yükleyin.", - "postActions/restore/manualInstructions/default/text": "\"dotnet restore\" komutunu çalıştır" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json deleted file mode 100644 index 6ed8a246802f..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": ".NET 辅助角色", - "description": "用于创建在辅助角色中运行 .NET 代码的类库的项目。", - "symbols/Framework/description": "项目的目标框架。", - "symbols/Framework/choices/net11.0/description": "目标 net11.0", - "symbols/skipRestore/description": "如果已指定,则在创建时跳过项目的自动还原。", - "postActions/restore/description": "还原此项目所需的 NuGet 包。", - "postActions/restore/manualInstructions/default/text": "运行 \"dotnet restore\"" -} \ No newline at end of file diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json deleted file mode 100644 index 62086db0d1ef..000000000000 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/WebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "author": "Microsoft", - "name": ".NET 背景工作角色", - "description": "用於建立類別庫的專案,可在背景工作角色中執行 .NET 程式碼。", - "symbols/Framework/description": "專案的目標架構。", - "symbols/Framework/choices/net11.0/description": "目標 net11.0", - "symbols/skipRestore/description": "如果指定,則會在建立時跳過專案的自動還原。", - "postActions/restore/description": "還原此專案所需的 NuGet 套件。", - "postActions/restore/manualInstructions/default/text": "執行 'dotnet restore'" -} \ No newline at end of file From d67db24faabcf568967ec1f5b68f96290092dbfb Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Thu, 2 Apr 2026 21:18:41 +0200 Subject: [PATCH 08/10] Test got adjusted to the changes. --- .../WebWorkerTemplateE2ETest.cs | 34 +++++-------------- .../Templates.Tests/WebWorkerTemplateTest.cs | 2 +- .../Templates.Tests/template-baselines.json | 7 ++-- 3 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/ProjectTemplates/test/Templates.Blazor.Tests/WebWorkerTemplateE2ETest.cs b/src/ProjectTemplates/test/Templates.Blazor.Tests/WebWorkerTemplateE2ETest.cs index bd0f5e0c2d42..59d74bd12b3c 100644 --- a/src/ProjectTemplates/test/Templates.Blazor.Tests/WebWorkerTemplateE2ETest.cs +++ b/src/ProjectTemplates/test/Templates.Blazor.Tests/WebWorkerTemplateE2ETest.cs @@ -160,31 +160,17 @@ public async ValueTask DisposeAsync() private async Task CreateWebWorkerLibrary(string workerLibDir) { var hiveArg = $"--debug:disable-sdk-templates --debug:custom-hive \"{TemplatePackageInstaller.CustomHivePath}\""; - var args = $"new webworker {hiveArg} -n WorkerLib -o \"{workerLibDir}\""; + var args = $"new blazorwebworker {hiveArg} -n WorkerLib -o \"{workerLibDir}\""; using var result = ProcessEx.Run(Output, AppContext.BaseDirectory, DotNetMuxer.MuxerPathOrDefault(), args); await result.Exited; - Assert.True(result.ExitCode == 0, $"Failed to create webworker template: {result.Output}\n{result.Error}"); + Assert.True(result.ExitCode == 0, $"Failed to create blazorwebworker template: {result.Output}\n{result.Error}"); - ModifyWorkerLibProjectFile(workerLibDir); + CopyWorkerMethods(workerLibDir); - using var restoreResult = ProcessEx.Run(Output, workerLibDir, DotNetMuxer.MuxerPathOrDefault(), "restore"); + using var restoreResult= ProcessEx.Run(Output, workerLibDir, DotNetMuxer.MuxerPathOrDefault(), "restore"); await restoreResult.Exited; - Assert.True(restoreResult.ExitCode == 0, $"Failed to restore webworker library: {restoreResult.Output}\n{restoreResult.Error}"); - } - - private static void ModifyWorkerLibProjectFile(string workerLibDir) - { - var csprojPath = Path.Combine(workerLibDir, "WorkerLib.csproj"); - var content = File.ReadAllText(csprojPath); - - if (!content.Contains("AllowUnsafeBlocks")) - { - content = content.Replace( - "", - " true\n "); - File.WriteAllText(csprojPath, content); - } + Assert.True(restoreResult.ExitCode == 0, $"Failed to restore blazorwebworker library: {restoreResult.Output}\n{restoreResult.Error}"); } private static void AddHostProjectSettings(Project hostProject) @@ -194,13 +180,8 @@ private static void AddHostProjectSettings(Project hostProject) var settings = @" - true true - - - - "; content = content.Replace("", settings + ""); File.WriteAllText(csprojPath, content); @@ -230,9 +211,12 @@ private void CopyTestAssets(Project hostProject) File.WriteAllText( Path.Combine(pagesDir, "WebWorkerTest.razor"), testComponentContent); + } + private static void CopyWorkerMethods(string workerLibDir) + { var workerMethodsSource = Path.Combine(TestAssetsPath, "TestWorkerMethods.cs"); - File.Copy(workerMethodsSource, Path.Combine(hostProject.TemplateOutputDir, "TestWorkerMethods.cs"), overwrite: true); + File.Copy(workerMethodsSource, Path.Combine(workerLibDir, "TestWorkerMethods.cs"), overwrite: true); } private void LogBuildDiagnostics(Project hostProject, string buildKind) diff --git a/src/ProjectTemplates/test/Templates.Tests/WebWorkerTemplateTest.cs b/src/ProjectTemplates/test/Templates.Tests/WebWorkerTemplateTest.cs index 0b2b82586e7d..942a730adbd6 100644 --- a/src/ProjectTemplates/test/Templates.Tests/WebWorkerTemplateTest.cs +++ b/src/ProjectTemplates/test/Templates.Tests/WebWorkerTemplateTest.cs @@ -38,7 +38,7 @@ public async Task WebWorkerTemplate_CanCreateBuildPublish() { var project = await ProjectFactory.CreateProject(Output); - await project.RunDotNetNewAsync("webworker"); + await project.RunDotNetNewAsync("blazorwebworker"); await project.RunDotNetPublishAsync(); diff --git a/src/ProjectTemplates/test/Templates.Tests/template-baselines.json b/src/ProjectTemplates/test/Templates.Tests/template-baselines.json index 452fabb4a9b0..2fa9e721895a 100644 --- a/src/ProjectTemplates/test/Templates.Tests/template-baselines.json +++ b/src/ProjectTemplates/test/Templates.Tests/template-baselines.json @@ -3745,12 +3745,13 @@ ] } }, - "webworker": { + "blazorwebworker": { "Default": { - "Template": "webworker", - "Arguments": "new webworker", + "Template": "blazorwebworker", + "Arguments": "new blazorwebworker", "Files": [ "WebWorkerClient.cs", + "WorkerMethods.cs", "wwwroot/dotnet-web-worker.js", "wwwroot/dotnet-web-worker-client.js" ] From 5289017e5fa6aa3770aad557d5148a3c8ba0cbaf Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Thu, 2 Apr 2026 22:11:59 +0200 Subject: [PATCH 09/10] Both assemblies can export methods at the same time --- .../wwwroot/dotnet-web-worker.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker.js b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker.js index 4800af70e39a..336613184362 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker.js +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/wwwroot/dotnet-web-worker.js @@ -1,12 +1,18 @@ -let workerExports = null; +let workerExports = {}; let startupError = null; async function initialize(dotnetJsUrl, assemblyName) { try { const { dotnet } = await import(dotnetJsUrl); const { getAssemblyExports, getConfig } = await dotnet.create(); - const resolvedAssemblyName = assemblyName ?? getConfig().mainAssemblyName; - workerExports = await getAssemblyExports(resolvedAssemblyName); + const mainAssemblyName = getConfig().mainAssemblyName; + + workerExports = { ...await getAssemblyExports(mainAssemblyName) }; + + if (assemblyName && assemblyName !== mainAssemblyName) { + workerExports = { ...workerExports, ...await getAssemblyExports(assemblyName) }; + } + self.postMessage({ type: "ready" }); } catch (err) { const errorMessage = err?.message ?? String(err); @@ -25,7 +31,7 @@ self.addEventListener('message', async (e) => { const { method, args, requestId } = e.data; try { - if (!workerExports) { + if (Object.keys(workerExports).length === 0) { throw new Error(startupError || "Worker .NET runtime not loaded"); } From cd1e02a17b43be468a75f853fadb1ec079f51776 Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz Date: Fri, 3 Apr 2026 09:45:19 +0200 Subject: [PATCH 10/10] Feedback: better wording. --- .../.template.config/localize/templatestrings.cs.json | 4 ++-- .../.template.config/localize/templatestrings.de.json | 4 ++-- .../.template.config/localize/templatestrings.en.json | 2 +- .../.template.config/localize/templatestrings.es.json | 4 ++-- .../.template.config/localize/templatestrings.fr.json | 4 ++-- .../.template.config/localize/templatestrings.it.json | 4 ++-- .../.template.config/localize/templatestrings.ja.json | 4 ++-- .../.template.config/localize/templatestrings.ko.json | 4 ++-- .../.template.config/localize/templatestrings.pl.json | 4 ++-- .../.template.config/localize/templatestrings.pt-BR.json | 4 ++-- .../.template.config/localize/templatestrings.ru.json | 4 ++-- .../.template.config/localize/templatestrings.tr.json | 4 ++-- .../.template.config/localize/templatestrings.zh-Hans.json | 4 ++-- .../.template.config/localize/templatestrings.zh-Hant.json | 4 ++-- .../BlazorWebWorker-CSharp/.template.config/template.json | 2 +- .../.template.config/templatestrings.json | 2 +- 16 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.cs.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.cs.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.cs.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.cs.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.de.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.de.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.de.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.de.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.en.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.en.json index 2e1053d2cb59..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.en.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.en.json @@ -1,7 +1,7 @@ { "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.es.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.es.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.es.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.es.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.fr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.fr.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.fr.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.fr.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.it.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.it.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.it.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.it.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ja.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ja.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ja.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ja.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ko.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ko.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ko.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ko.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pl.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pl.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pl.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pl.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.pt-BR.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ru.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ru.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ru.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.ru.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.tr.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.tr.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.tr.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.tr.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hans.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json index 0618b4ebb175..bf0c9ca06543 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/localize/templatestrings.zh-Hant.json @@ -1,7 +1,7 @@ -{ +{ "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/net11.0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/template.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/template.json index 5fbfe0e1e1ba..e08fcff957b9 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/template.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/template.json @@ -10,7 +10,7 @@ ], "name": "Blazor Web Worker", "generatorVersions": "[1.0.0.0-*)", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "groupIdentity": "Microsoft.Web.Blazor.WebWorker", "precedence": "10000", "identity": "Microsoft.Web.Blazor.WebWorker.Library.CSharp.11.0", diff --git a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/templatestrings.json b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/templatestrings.json index 12558c179b3a..438554342219 100644 --- a/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/templatestrings.json +++ b/src/ProjectTemplates/Web.ProjectTemplates/content/BlazorWebWorker-CSharp/.template.config/templatestrings.json @@ -1,7 +1,7 @@ { "author": "Microsoft", "name": "Blazor Web Worker", - "description": "A project for creating a Blazor class library that runs .NET code in a Web Worker, keeping your WebAssembly UI responsive during heavy computations.", + "description": "A project for creating a class library that runs .NET code on a web worker from a Blazor WebAssembly or Blazor Web app.", "symbols/Framework/description": "The target framework for the project.", "symbols/Framework/choices/0/description": "Target net11.0", "symbols/skipRestore/description": "If specified, skips the automatic restore of the project on create.",