将客户端 Blazor 添加到现有的 Asp.Net Core 3.1 应用程序

Mic*_*ica 5 c# nuget asp.net-core blazor blazor-client-side

我正在尝试在现有 Asp.Net Core 3.1 应用程序的控制器视图中呈现客户端 Blazor 应用程序。

我开始遵循本指南,并从模板创建了一个空的应用程序。我发现我需要的是:

  1. 这些 nuget 包:
    <PackageReference Include="Microsoft.AspNetCore.Blazor" Version="3.2.0-preview1.20073.1" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="3.2.0-preview1.20073.1" PrivateAssets="all" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.DevServer" Version="3.2.0-preview1.20073.1" PrivateAssets="all" />
    <PackageReference Include="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.2.0-preview1.20073.1" />
    
    Run Code Online (Sandbox Code Playgroud)
  2. 此代码在Program.Main
    var builder = WebAssemblyHostBuilder.CreateDefault(args);
    builder.RootComponents.Add<App>("app");
    await builder.Build().RunAsync();
    
    Run Code Online (Sandbox Code Playgroud)
  3. Blazor 应用程序“入口点”的视图中的此 HTML 代码:

    <app>Loading...</app>
    
    <div id="blazor-error-ui">
        An unhandled error has occurred.
        <a href="" class="reload">Reload</a>
        <a class="dismiss"></a>
    </div>
    <script src="_framework/blazor.webassembly.js"></script>
    
    Run Code Online (Sandbox Code Playgroud)
  4. .razor组件:
    • 应用程序.razor
    • _Imports.razor
    • 共享/MainLayout.razor
    • 共享/NavMenu.razor

应该是这样,但是我收到错误消息(如果需要,可以添加完整的堆栈跟踪):

---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Microsoft.AspNetCore.Mvc.Razor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到那个 nuget 包版本?我需要程序集绑定吗?我试过没有成功:

<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.0" />
Run Code Online (Sandbox Code Playgroud)

编辑

添加以下包解决了该问题:

---> Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly: 'Microsoft.AspNetCore.Mvc.Razor, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
Run Code Online (Sandbox Code Playgroud)

但现在我有一个不同的错误:

C:\Program Files\dotnet\sdk\3.1.101\Sdks\Microsoft.NET.Sdk.Razor\build\netstandard2.0\Microsoft.NET.Sdk.Razor.Component.targets(106,5): error : rzc generate exited with code 1.
Run Code Online (Sandbox Code Playgroud)

一旦我打开任何.razor文件,Visual Studio (16.4.4) 就会崩溃

agu*_*ars 3

在您的项目中添加以下包:

<PackageReference Include="Microsoft.AspNetCore.Blazor" Version="3.2.0-preview1.20073.1" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="3.2.0-preview1.20073.1" PrivateAssets="all" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.2.0-preview1.20073.1" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.Server" Version="3.2.0-preview1.20073.1" />
Run Code Online (Sandbox Code Playgroud)

在您的Startup.Configure方法中添加:

app.UseClientSideBlazorFiles<BlazorApp.Program>()
   .UseEndpoints(endpoints =>
   {
       endpoints.MapFallbackToClientSideBlazor<BlazorApp.Program>("blazor");
   });
Run Code Online (Sandbox Code Playgroud)

其中“blazor”是托管 blazor 应用程序的 razor 视图的相对 uri。
以及BlazorApp.Program您的 blazor 应用程序的类型Program

如果您希望将其放在 2 个独立的项目中,则 Blazor 应用程序项目必须具有这些包:

<PackageReference Include="Microsoft.AspNetCore.Blazor" Version="3.2.0-preview1.20073.1" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.Build" Version="3.2.0-preview1.20073.1" PrivateAssets="all" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.DevServer" Version="3.2.0-preview1.20073.1" PrivateAssets="all" />
<PackageReference Include="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.2.0-preview1.20073.1" />
Run Code Online (Sandbox Code Playgroud)

服务器项目这个:

<PackageReference Include="Microsoft.AspNetCore.Blazor.Server" Version="3.2.0-preview1.20073.1" />
Run Code Online (Sandbox Code Playgroud)