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

IIS ASP.NET环境下.NET程序集如何获取自身版本号

问题原因分析

原代码报错的核心原因有两个:

  • FileVersionInfo.GetVersionInfo()需要读取磁盘上的DLL实体文件,而IIS应用池的默认运行身份(比如IIS AppPool\对应应用池名)对站点bin目录的文件默认仅授予执行权限,没有文件读取权限,会触发权限异常。
  • ASP.NET动态编译场景下,Assembly.Location可能返回临时编译目录的路径,读取到的版本信息也不是目标DLL的实际版本。
可行解决方案

不需要修改IIS权限,直接从程序集的元数据中读取版本信息即可,该方式完全不需要访问磁盘文件,兼容WinForms和ASP.NET/IIS环境:

如果你需要读取AssemblyVersion(AssemblyInfo.cs中标记的程序集版本)

private string getVersion() {
    System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
    string tempFileVersion = assembly.GetName().Version.ToString();

    if (tempFileVersion.EndsWith(".0")) {
        return tempFileVersion.Substring(0, tempFileVersion.Length - 2);
    } else {
        return tempFileVersion;
    }
}

如果你需要读取AssemblyFileVersion(AssemblyInfo.cs中标记的文件版本)

private string getVersion() {
    System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
    var fileVersionAttr = assembly.GetCustomAttribute<System.Reflection.AssemblyFileVersionAttribute>();
    string tempFileVersion = fileVersionAttr.Version;

    if (tempFileVersion.EndsWith(".0")) {
        return tempFileVersion.Substring(0, tempFileVersion.Length - 2);
    } else {
        return tempFileVersion;
    }
}
备选方案(不推荐)

如果一定要沿用原FileVersionInfo的实现逻辑,可以手动给站点bin目录添加对应IIS应用池运行身份的读取和执行权限即可解决异常,但会带来额外的权限配置成本和安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:00:04