获取aspx文件的.NET程序集版本

时间:2011-05-27 12:30:26

标签: asp.net assemblies versioning

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

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

找到正在执行的程序集版本非常容易,但是如果不修改其他应用程序,是否可能?

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

更新:我有幸运气

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

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

3 个答案:

答案 0 :(得分:1)

如果不修改Web应用程序以通过基于URL的检索(简单的页面GET是一个简单明了的页面)来公开版本号,您将需要找到一种方法来找出Web应用程序的DLL来自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是要探索的集会。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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