运行 单个 WASM 托管项目中的两个 Blazor WASM 应用程序
Run two blazor WASM apps inside a single WASM-hosted project
我正在使用 WebAssembly (WASM) 托管的 Blazor 应用程序的最新预览版。我已经设置了一个 WASM 托管应用程序并将其配置为在客户端应用程序文件夹的 wwwroot/index.html
文件中使用 /App1/
的基础 href
:
<base href="/App1/" />
此时,我的app结构是这样的:
- 客户
- 服务器
- 共享
然后我将服务器应用程序文件夹中的应用程序映射到路由:
app.Map("/app1", app1 =>
{
app1.UseHttpsRedirection();
app1.UseBlazorFrameworkFiles();
app1.UseStaticFiles();
app1.UsePathBase("/app1");
app1.UseRouting();
app1.UseIdentityServer();
app1.UseAuthentication();
app1.UseAuthorization();
app1.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
});
运行 这与几个启动设置更改映射到 /app1
非常棒。接下来,我复制了客户端应用程序并将命名空间和 csproj
更改为 App2
.
我的应用结构现在是:
- App1(客户端应用)
- App2(客户端应用)
- 服务器
- 共享
我将基础 href
设置为 /App2/
,并且我向服务器启动添加了第二个映射:
app.Map("/app1", app1 =>
{
app1.UseHttpsRedirection();
app1.UseBlazorFrameworkFiles();
app1.UseStaticFiles();
app1.UsePathBase("/app1");
app1.UseRouting();
app1.UseIdentityServer();
app1.UseAuthentication();
app1.UseAuthorization();
app1.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
});
app.Map("/app2", app2 =>
{
app2.UseHttpsRedirection();
app2.UseBlazorFrameworkFiles();
app2.UseStaticFiles();
app2.UsePathBase("/app2");
app2.UseRouting();
app2.UseIdentityServer();
app2.UseAuthentication();
app2.UseAuthorization();
app2.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
});
但是,该项目没有 运行。它抱怨静态文件仍然合并在一起。尝试使用 dotnet run
:
运行 服务器项目时出现此编译错误
/usr/local/share/dotnet/sdk/3.1.201/Sdks/Microsoft.NET.Sdk.Razor/build/netstandard2.0/Microsoft.NET.Sdk.Razor.StaticWebAssets.targets(191,5): error : Conflicting assets with the same path '/appsettings.Development.json' for content root paths '/Users/user/Developer/WasmHosted/App1/wwwroot/appsettings.Development.json' and '/Users/user/Developer/WasmHosted/App2/wwwroot/appsettings.Development.json'.
我还尝试添加 commandLineArgs
来更改客户端应用 launchsettings
中的内容根位置,但没有效果:
"commandLineArgs": "--contentroot=/app1",
任何建议将不胜感激,因为我不知道还能尝试什么。
这是我用来创建项目的dotnet new
命令
dotnet new blazorwasm -au Individual -ho -n WasmHosted
Javier 是 Blazor 项目的团队成员,在这里开发了一个示例项目:
https://github.com/javiercn/BlazorMultipleApps/blob/master/BlazorMultipleApps
您可以参考 app.UseMulitSpa, I have Created a new Library WasmService 来处理这个问题
使用步骤:
step 1: 设置 wwwroot 下的 blazor wasm app 根目录文件夹
step 2:使用app.UseMulitSpa添加blazor wasm应用,你需要定义一个public路径,
在 运行 期间,主主机应用程序将为每个 blazor wasm 应用程序使用独立端口,并且 WasmService 有一个用于主主机应用程序调用的内部代理。
我正在使用 WebAssembly (WASM) 托管的 Blazor 应用程序的最新预览版。我已经设置了一个 WASM 托管应用程序并将其配置为在客户端应用程序文件夹的 wwwroot/index.html
文件中使用 /App1/
的基础 href
:
<base href="/App1/" />
此时,我的app结构是这样的:
- 客户
- 服务器
- 共享
然后我将服务器应用程序文件夹中的应用程序映射到路由:
app.Map("/app1", app1 =>
{
app1.UseHttpsRedirection();
app1.UseBlazorFrameworkFiles();
app1.UseStaticFiles();
app1.UsePathBase("/app1");
app1.UseRouting();
app1.UseIdentityServer();
app1.UseAuthentication();
app1.UseAuthorization();
app1.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
});
运行 这与几个启动设置更改映射到 /app1
非常棒。接下来,我复制了客户端应用程序并将命名空间和 csproj
更改为 App2
.
我的应用结构现在是:
- App1(客户端应用)
- App2(客户端应用)
- 服务器
- 共享
我将基础 href
设置为 /App2/
,并且我向服务器启动添加了第二个映射:
app.Map("/app1", app1 =>
{
app1.UseHttpsRedirection();
app1.UseBlazorFrameworkFiles();
app1.UseStaticFiles();
app1.UsePathBase("/app1");
app1.UseRouting();
app1.UseIdentityServer();
app1.UseAuthentication();
app1.UseAuthorization();
app1.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
});
app.Map("/app2", app2 =>
{
app2.UseHttpsRedirection();
app2.UseBlazorFrameworkFiles();
app2.UseStaticFiles();
app2.UsePathBase("/app2");
app2.UseRouting();
app2.UseIdentityServer();
app2.UseAuthentication();
app2.UseAuthorization();
app2.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
endpoints.MapFallbackToFile("index.html");
});
});
但是,该项目没有 运行。它抱怨静态文件仍然合并在一起。尝试使用 dotnet run
:
/usr/local/share/dotnet/sdk/3.1.201/Sdks/Microsoft.NET.Sdk.Razor/build/netstandard2.0/Microsoft.NET.Sdk.Razor.StaticWebAssets.targets(191,5): error : Conflicting assets with the same path '/appsettings.Development.json' for content root paths '/Users/user/Developer/WasmHosted/App1/wwwroot/appsettings.Development.json' and '/Users/user/Developer/WasmHosted/App2/wwwroot/appsettings.Development.json'.
我还尝试添加 commandLineArgs
来更改客户端应用 launchsettings
中的内容根位置,但没有效果:
"commandLineArgs": "--contentroot=/app1",
任何建议将不胜感激,因为我不知道还能尝试什么。
这是我用来创建项目的dotnet new
命令
dotnet new blazorwasm -au Individual -ho -n WasmHosted
Javier 是 Blazor 项目的团队成员,在这里开发了一个示例项目: https://github.com/javiercn/BlazorMultipleApps/blob/master/BlazorMultipleApps
您可以参考 app.UseMulitSpa, I have Created a new Library WasmService 来处理这个问题
使用步骤: step 1: 设置 wwwroot 下的 blazor wasm app 根目录文件夹 step 2:使用app.UseMulitSpa添加blazor wasm应用,你需要定义一个public路径,
在 运行 期间,主主机应用程序将为每个 blazor wasm 应用程序使用独立端口,并且 WasmService 有一个用于主主机应用程序调用的内部代理。