在“.NET MAUI Blazor Hybrid and Web App”类型的项目中,GUI会显示“发生未处理的错误”,但错误信息却只输出到错误日志里
我创建了一个类型为“.NET MAUI Blazor Hybrid and Web App” 的项目,并进行了一些修改。 在启动该应用的Windows版本时,出现了“发生了未处理的错误”消息:

发生了未处理的错误。重新加载 🗙
在浏览器开发者工具中没有任何错误(是的,即使在Windows原生应用中也可能启动浏览器开发者工具——我推测是因为.NET MAUI使用了WebView):

调试输出中也没有任何错误线索:
'Myapp.Native.exe' (CoreCLR: DefaultDomain): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Private.CoreLib.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Myapp.Native.dll'. Symbols loaded.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Runtime.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'c:\program files\microsoft visual studio\18\community\common7\ide\extensions\microsoft\managedprojectsystem\HotReload\net10.0\Microsoft.Extensions.DotNetDeltaApplier.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Linq.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Runtime.Loader.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Console.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Collections.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Runtime.InteropServices.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Collections.Concurrent.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.IO.Pipes.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Threading.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Threading.Overlapped.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Security.AccessControl.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Security.Principal.Windows.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Security.Claims.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\WinRT.Runtime.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.WinUI.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\PrivateAssemblies\Runtime\Microsoft.VisualStudio.Debugger.Runtime.NetCoreApp.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Memory.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Runtime.CompilerServices.Unsafe.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.ObjectModel.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Windows.SDK.NET.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Numerics.Vectors.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Private.Uri.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.ComponentModel.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Security.Cryptography.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.InteractiveExperiences.Projection.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Maui.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Linq.Expressions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Maui.Essentials.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Maui.Controls.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.DependencyInjection.Abstractions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Hosting.Abstractions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Logging.Abstractions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Configuration.Abstractions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Diagnostics.Abstractions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Maui.Controls.Xaml.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Xml.ReaderWriter.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Private.Xml.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.AspNetCore.Components.WebView.Maui.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Logging.Debug.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Configuration.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Primitives.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.FileProviders.Abstractions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Diagnostics.DiagnosticSource.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Maui.Graphics.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Net.Primitives.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.ComponentModel.TypeConverter.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.AspNetCore.Components.WebView.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Logging.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.JSInterop.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.AspNetCore.Components.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.AspNetCore.Components.Web.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.Options.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.DependencyInjection.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Diagnostics.Tracing.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Threading.ThreadPool.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Text.Json.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Myapp.Shared.dll'. Symbols loaded.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Reflection.Emit.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'Snippets'.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Reflection.Emit.Lightweight.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Reflection.Emit.ILGeneration.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Reflection.Primitives.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Extensions.FileProviders.Composite.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Web.WebView2.Core.Projection.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'D:\Myapp\Native\bin\Debug\net10.0-windows10.0.19041.0\win-x64\Microsoft.Graphics.Canvas.Interop.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\Microsoft.Win32.Registry.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'c:\program files\microsoft visual studio\18\community\common7\ide\commonextensions\microsoft\xamldiagnostics\Mobile\Microsoft.Maui.Controls.HotReload.Forms.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\netstandard.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'c:\program files\microsoft visual studio\18\community\common7\ide\commonextensions\microsoft\xamldiagnostics\Mobile\Microsoft.VisualStudio.DesignTools.MobileTapContracts.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'c:\program files\microsoft visual studio\18\community\common7\ide\commonextensions\microsoft\xamldiagnostics\Mobile\Microsoft.VisualStudio.DesignTools.TapContract.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Threading.Thread.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Text.RegularExpressions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Runtime.Serialization.Json.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Private.DataContractSerialization.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Runtime.Serialization.Xml.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Text.Encoding.Extensions.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Runtime.Serialization.Primitives.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'c:\program files\microsoft visual studio\18\community\common7\ide\commonextensions\microsoft\xamldiagnostics\Mobile\Microsoft.VisualStudio.DesignTools.XamlTapContract.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Text.Encodings.Web.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Collections.Immutable.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.IO.Pipelines.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\10.0.3\System.Collections.NonGeneric.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'Myapp.Native.exe' (CoreCLR: clrhost): Loaded 'Anonymously Hosted DynamicMethods Assembly'.
我不会详细说明我进行了哪些具体的修改,因为这个问题的目标是从某种输出中找出原因。即使我回滚这些修改,这个问题未来仍可能再次出现,回滚也不能解决,但我也不愿再去面对这种麻烦。我的问题是,如何获取会指向该问题的输出?
顺便说一句,An unhandled error has occurred. 消息属于 MainLayout.razor,这是自动生成的布局文件:
@inherits LayoutComponentBase
@Body
<div id="blazor-error-ui" data-nosnippet>
An unhandled error has occurred.
<a href="." class="reload">Reload</a>
<span class="dismiss">🗙</span>
</div>
也许知道它是如何被触发的,可能会成为线索。
更新
我已经按照建议尝试使用 ErrorBoundary。
之前,Shared/Layout/MainLayout.razor 是:
@inherits LayoutComponentBase
@Body
<div id="blazor-error-ui" data-nosnippet>
An unhandled error has occurred.
<a href="." class="reload">Reload</a>
<span class="dismiss">🗙</span>
</div>
现在是:
@using MyMapp.Shared.Components
@inherits LayoutComponentBase
<MyErrorBoundary>
@Body
</MyErrorBoundary>
其中 MyErrorBoundary 是:
<ErrorBoundary @ref="_errorBoundary">
<ChildContent>
@ChildContent
</ChildContent>
<ErrorContent>
@if (ErrorContent is not null)
{
@ErrorContent(context)
}
else
{
<div class="my-error-boundary">
<p>An unhandled error has occurred.</p>
<p>@context.Message</p>
<button class="reload" @onclick="Recover">Reload</button>
</div>
}
</ErrorContent>
</ErrorBoundary>
@code {
private ErrorBoundary? _errorBoundary;
[Parameter]
public RenderFragment? ChildContent { get; set; }
[Parameter]
public RenderFragment<Exception>? ErrorContent { get; set; }
public void Recover()
{
_errorBoundary?.Recover();
}
}
没有错误信息:
但是,如果回滚修改,仍会再次显示“发生了未处理的错误。”:
解决方案
从 MainLayout.razor 文件可以看出,包含“发生了未处理的错误”这条信息的元素并没有进行条件渲染:
@inherits LayoutComponentBase
@Body
<div id="blazor-error-ui" data-nosnippet>
An unhandled error has occurred.
<a href="." class="reload">Reload</a>
<span class="dismiss">🗙</span>
</div>
相反,使用的是对动态CSS样式的处理。初始时,ID为 blazor-error-ui 的元素通过 display: none 被隐藏。
该规则在 MainLayout.razor.css 中声明:
#blazor-error-ui {
color-scheme: light only;
background: lightyellow;
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
box-sizing: border-box;
display: none;
left: 0;
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
position: fixed;
width: 100%;
z-index: 1000;
}
#blazor-error-ui .dismiss {
cursor: pointer;
position: absolute;
right: 0.75rem;
top: 0.5rem;
}
因此如果由于某种原因页面无法访问该样式表,消息就会显示出来。这正是上述情形发生的原因。
感谢 Mister Magoo 和 H.A.H. 指出并定位了这个原因。

