【问题标题】:Blazor hosted client - error on published web application on azure app serviceBlazor 托管客户端 - 在 Azure 应用服务上发布的 Web 应用程序出错
【发布时间】:2020-09-18 09:31:26
【问题描述】:

调用 xxxxxxxx.azurewebsites.net 时,浏览器控制台中会出现以下内容。任何人都可以帮忙。谢谢。

blazor.webassembly.js:1 System.InvalidOperationException: A suitable constructor for type 'Microsoft.Extensions.Logging.LoggerFactory' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite (Microsoft.Extensions.DependencyInjection.ServiceLookup.ResultCache lifetime, System.Type serviceType, System.Type implementationType, Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteChain callSiteChain) <0x1ef0ee0 + 0x00086> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact (Microsoft.Extensions.DependencyInjection.ServiceDescriptor descriptor, System.Type serviceType, Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteChain callSiteChain, System.Int32 slot) <0x1ee9cc0 + 0x000f2> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact (System.Type serviceType, Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteChain callSiteChain) <0x1ee9878 + 0x00034> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateCallSite (System.Type serviceType, Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteChain callSiteChain) <0x1ee91b0 + 0x0005a> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory+<>c__DisplayClass7_0.<GetCallSite>b__0 (System.Type type) <0x1ee8ce8 + 0x00010> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at System.Collections.Concurrent.ConcurrentDictionary`2[TKey,TValue].GetOrAdd (TKey key, System.Func`2[T,TResult] valueFactory) <0x1ed0ea0 + 0x0006c> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.GetCallSite (System.Type serviceType, Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteChain callSiteChain) <0x1ed0d28 + 0x00040> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.CreateServiceAccessor (System.Type serviceType) <0x1ed0790 + 0x00018> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at System.Collections.Concurrent.ConcurrentDictionary`2[TKey,TValue].GetOrAdd (TKey key, System.Func`2[T,TResult] valueFactory) <0x1ed0018 + 0x0006c> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService (System.Type serviceType, Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope serviceProviderEngineScope) <0x1ecfdd8 + 0x00024> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService (System.Type serviceType) <0x1ee8c18 + 0x00020> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (System.IServiceProvider provider, System.Type serviceType) <0x1ecf710 + 0x00062> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T] (System.IServiceProvider provider) <0x1ee8b20 + 0x0001e> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.AspNetCore.Components.WebAssembly.Hosting.WebAssemblyHost.RunAsyncCore (System.Threading.CancellationToken cancellationToken) <0x1ee81e0 + 0x0016a> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at TakeOut.Client.Program.Main (System.String[] args) <0x1e12b18 + 0x00152> in <filename unknown>:0 
(anonymous) @ blazor.webassembly.js:1
blazor.webassembly.js:1   at Microsoft.AspNetCore.Components.WebAssembly.Hosting.EntrypointInvoker.InvokeEntrypoint (System.String assemblyName, System.String[] args, Microsoft.AspNetCore.Components.WebAssembly.Hosting.SatelliteResourcesLoader satelliteResourcesLoader) <0x1d29ea8 + 0x001d6> in <filename unknown>:0 

客户项目:

    -PropertyGroup-
    -TargetFramework-netstandard2.1-/TargetFramework-
    -RazorLangVersion-3.0-/RazorLangVersion-
    -ServiceWorkerAssetsManifest-service-worker-assets.js-/ServiceWorkerAssetsManifest-
  -/PropertyGroup-

  -ItemGroup-
    -PackageReference Include="Blazored.LocalStorage" Version="2.1.5" /-
    -PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="3.2.0-preview5.20216.8" /-
    -PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Build" Version="3.2.0-preview5.20216.8" PrivateAssets="all" /-
    -PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="3.2.0-preview5.20216.8" PrivateAssets="all" /-
    -PackageReference Include="Microsoft.AspNetCore.Blazor.HttpClient" Version="3.2.0-preview2.20160.5" /-
    -PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="3.1.4" /-
  -/ItemGroup-
  -ItemGroup-
    -ProjectReference Include="..\Shared\TakeOut.Shared.csproj" /-
  -/ItemGroup-

  -!-- When publishing, swap service-worker.published.js in place of service-worker.js ---
  -ItemGroup Condition="'$(DesignTimeBuild)' != 'true'"-
    -Content Remove="wwwroot\service-worker.js" /-
    -Content Update="wwwroot\service-worker.published.js" Link="wwwroot\service-worker.js" /-
  -/ItemGroup-
  -ItemGroup-
    -Folder Include="wwwroot\Images\" /-
  -/ItemGroup-
</Project>

服务器项目:

-Project Sdk="Microsoft.NET.Sdk.Web"-

  -PropertyGroup-
    -TargetFramework-netcoreapp3.1-/TargetFramework-
    -DisableImplicitComponentsAnalyzers-true-/DisableImplicitComponentsAnalyzers-
  -/PropertyGroup-

  -ItemGroup-
    -PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="3.2.0-preview5.20216.8" /-
    -PackageReference Include="Microsoft.Azure.Cosmos" Version="3.8.0" /-
    -PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.2" /-
  -/ItemGroup-

  -ItemGroup-
    -ProjectReference Include="..\Client\TakeOut.Client.csproj" /-
    -ProjectReference Include="..\Shared\TakeOut.Shared.csproj" /-
  -/ItemGroup-


-/Project-

【问题讨论】:

  • 对于客户端:
    public static async Task Main(string[] args) { var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("app"); builder.Services.AddSingleton(new System.Net.Http.HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }); builder.Services.AddBlazoredLocalStorage();等待 builder.Build().RunAsync(); }
  • 对于服务器:
    public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddSingleton(); }

标签: azure azure-web-app-service blazor webassembly


【解决方案1】:

这看起来像是一个链接器问题。如果禁用链接,它是否有效?

<PropertyGroup>
  <BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>
</PropertyGroup>

另外,您使用的是较旧的 (Microsoft.AspNetCore.Components.WebAssembly" Version="3.2.0-preview5.20216.8") 版本的 WebAssembly。

我建议升级到最新版本。

<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="3.2.0" />

您也可以尝试在本地清除缓存文件。

【讨论】:

    【解决方案2】:

    我将所有代码更新为 Web 程序集的发布版本,该版本在我的电脑上的开发模式下没有出现错误,但在将其发布到 azure 时出现错误。

    问题出在 Web 程序集中的 Microsoft.AspNetCore.SignalR.Client 上。删除包和包相关的代码没有产生任何错误。

    我通过在我的 Web 程序集中使用 javascript SignalR 解决了这个问题。它可以工作,但我更愿意使用包 SignalR 和 C# 代码来处理连接,而不是使用 javascript。

    注意:我尝试了仅使用 Web 程序集(而不是托管的 Web 程序集)的包。发布到 azure 时与包相同的错误。

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 2021-05-08
      • 2021-10-21
      • 2018-04-09
      • 1970-01-01
      • 2012-02-04
      相关资源
      最近更新 更多