Запустите два приложения Blazor WASM в одном проекте, размещенном в WASM - PullRequest
2 голосов
/ 06 мая 2020

Я использую последнюю предварительную версию приложения Blazor, размещенного на WebAssembly (WASM). Я установил приложение, размещенное в WASM, и настроил его для использования базового href из /App1/ внутри файла wwwroot/index.html папки клиентского приложения:

<base href="/App1/" />

На этом этапе мое приложение структура выглядит так:

  1. Клиент
  2. Сервер
  3. Общий

Затем я сопоставил приложение в папке серверного приложения с route:

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 работает fantasti c. Затем я скопировал клиентское приложение и изменил пространство имен и csproj на App2.

Моя структура приложения теперь будет:

  1. App1 (клиентское приложение)
  2. App2 (Клиентское приложение)
  3. Сервер
  4. Общий

Я установил базовый 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");
    });
});

Однако проект не запускается. Он жалуется, что файлы stati c все еще объединены. Я получаю эту ошибку компиляции при попытке запустить серверный проект с 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, чтобы изменить местоположение root содержимого в launchsettings из клиентские приложения без эффекта:

"commandLineArgs": "--contentroot=/app1",

Любые предложения были бы очень признательны, так как я не знаю, что еще попробовать.

Это команда dotnet new, которую я использовал для создать проект

dotnet new blazorwasm -au Individual -ho -n WasmHosted

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Хавьер, член команды проекта Blazor, разработал пример проекта здесь: https://github.com/javiercn/BlazorMultipleApps/blob/master/BlazorMultipleApps

0 голосов
/ 06 мая 2020

Вы можете сослаться на app.UseMulitSpa , Я создал новую библиотеку WasmService , чтобы справиться с этим

Используйте шаги: шаг 1 : установите приложение blazor wasm root поместите папку в wwwroot шаг 2 : используйте приложение .UseMulitSpa, чтобы добавить приложение blazor wasm, вам необходимо указать publi c путь,

Во время запуска приложение основного хоста будет использовать автономный порт для каждого приложения blazor wasm, а WasmService имеют внутренний прокси для вызова приложения главного хоста.

...