You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WebAssembly应用NavMenu显示版本等信息遇空引用异常求助

问题分析与解决方案

核心问题定位

你的空引用异常确实来自DisplayEnvironment属性,问题出在Environment.GetEnvironmentVariable的调用方式错误——该方法需要先传入环境变量名称,再指定目标(可选),而你直接传了EnvironmentVariableTarget.Process作为参数,导致方法无法找到对应变量,返回null后触发了异常。

另外,Blazor WebAssembly(WASM)运行在浏览器沙箱中,无法直接访问系统/进程级的环境变量,Environment.GetEnvironmentVariable在这里几乎起不到作用,得用WASM特有的方式获取环境信息。

修复后的完整代码

using System.Reflection;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;

public partial class NavMenu
{
    // 注入WASM环境服务
    [Inject]
    private IWebAssemblyHostEnvironment HostEnv { get; set; } = null!;

    // 更可靠的程序集版本获取方式
    protected static Version AppVersion => typeof(NavMenu).Assembly.GetName().Version ?? new Version("1.0.0.0");

    // 构建日期计算(避免AppVersion为null时崩溃)
    protected DateTime BuildDate
    {
        get
        {
            if (AppVersion.Build == 0 && AppVersion.Revision == 0)
                return DateTime.Now; // 回退到当前时间,避免计算异常
            
            return new DateTime(2000, 1, 1)
                .AddDays(AppVersion.Build)
                .AddSeconds(AppVersion.Revision * 2);
        }
    }

    // 获取WASM运行环境(开发/生产/ staging等)
    protected string DisplayEnvironment => HostEnv.EnvironmentName;
}

关键修复点说明

  • 环境变量获取:
    Blazor WASM通过IWebAssemblyHostEnvironment服务获取当前环境(对应ASPNETCORE_ENVIRONMENT或BlazorEnvironment变量),这是官方推荐的方式。如果需要自定义环境变量,要通过wwwroot/appsettings.{env}.json配置,或者在项目文件中通过<BlazorEnvironment>Production</BlazorEnvironment>指定构建时的环境。

  • 程序集版本获取:
    用typeof(NavMenu).Assembly替代Assembly.GetExecutingAssembly(),因为WASM中执行程序集的上下文可能和预期不同,通过具体类型获取程序集更稳定。同时去掉了强制抛出异常的逻辑,改用默认版本号回退,避免崩溃。

  • 构建日期容错:
    增加了对AppVersion.Build和Revision为0的判断,防止默认版本号(1.0.0.0)导致计算出不合理的早期日期。

额外配置提示

如果需要显示自定义版本信息(比如Git哈希、构建时间),可以在项目文件(.csproj)中添加以下配置,编译时将信息注入程序集:

<PropertyGroup>
  <AssemblyVersion>1.0.*</AssemblyVersion> <!-- 自动生成Build和Revision -->
  <InformationalVersion>$(AssemblyVersion)-$(GitHash)</InformationalVersion> <!-- 需要Git工具支持 -->
</PropertyGroup>

内容的提问来源于stack exchange,提问作者Riley Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:25:13