【问题标题】:Get .NET assembly version for aspx file获取 aspx 文件的 .NET 程序集版本
【发布时间】:2011-05-27 12:30:26
【问题描述】:

我想制作一个“属性样式的 Web 表单”,显示各种 .NET 应用程序的应用程序版本。

如果我知道网址,例如/someapp/default.aspx 是否可以通过反射来执行该页面并找出程序集版本?

很容易找到正在执行的程序集版本,但不修改其他应用程序,有可能吗?

属性页和其他应用程序都在同一台服务器和同一应用程序池中运行。

更新:我运气不错

var url = "~/SomeApp/default.aspx";
var appType = System.Web.Compilation.BuildManager.GetCompiledType(url);

但是导航appType查找程序集文件版本每次都不一样。

【问题讨论】:

    标签: asp.net assemblies versioning


    【解决方案1】:

    如果不修改 Web 应用程序以通过一些基于 URL 的检索来公开版本号(一个简单的页面 GET 很容易,显而易见),您将需要找到一种方法来找出 DLL 的位置Web 应用程序来自 URL。

    如果您可以通过某些约定(例如 /appX/ 始终位于 D:\Sites\appX\bin\appX.dll)或某些配置(您手动输入每个 URL 库的 DLL 所在的位置)知道 DLL 的位置一个数据库),然后您可以使用以下代码检索该 DLL 的程序集版本:

    Assembly assembly = Assembly.LoadFrom("MyAssembly.dll");
    Version ver = assembly.GetName().Version;
    

    代码取自this question

    编辑: 我环顾四周,有一些 API 可以检查 IIS 配置,因此如果您尝试从 URL 获取到程序集位置,这无疑是一条值得探索的途径。例如,This question 有一个从应用程序/站点名称获取物理路径的示例。 Microsoft.Web.Administration 是要探索的程序集。

    【讨论】:

    • 我不得不说这似乎是唯一的答案
    【解决方案2】:

    ASP.NET 引擎只向客户端流式传输 HTML、javascript 等。在响应中传递的程序集没有任何内容可以显示应用程序正在运行的 .net/asp.net 版本,除非服务器端的开发人员添加它。

    也就是说,您可以从http://uptime.netcraft.com/up/graph 的实用程序收集一些信息,该实用程序将为您提供一些服务器信息。不至于汇编版本,但这与我相信你会得到的一样接近。

    【讨论】:

      【解决方案3】:

      您可以实现自定义 HttpModule,将其放入您希望监控的每个应用程序的 bin 文件夹中,并在 web.config 文件中附加注册此模块。例如,在这个模块中,您应该处理请求,检索所有必需的信息并将其放入响应 cookie。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-28
        • 2020-05-09
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多