ASP.NET MVC:如何从HtmlHelper实例获取程序集信息?

Luc*_*Sam 11 c# reflection asp.net-mvc asp.net-mvc-3

我在与MVC应用程序程序集分开的程序集中有一个HtmlHelper扩展方法.在扩展方法中,我想获得MVC应用程序程序集的版本号.这可能吗?

调用程序集是剃刀视图动态程序集,因此无济于事.是否有一些嵌套在HtmlHelper中的对象可以为我提供MVC应用程序组件的版本号?我一直在探索HtmlHelper类文档,但到目前为止还没有找到解决我问题的方法.

谢谢!

And*_*tan 17

这是一个臭名昭着的邪恶之物 - 因为遗憾的是,没有一种特定的可靠方法可以做到这一点.

但是,由于它是一个MVC应用程序,因此它有一个Global.asax.cs - 因此它有一个本地定义的HttpApplication类.

从一个html帮助器中你可以得到这个:

public static string AppVersion(this HtmlHelper html)
{
  var appInstance = html.ViewContext.HttpContext.ApplicationInstance;
  //given that you should then be able to do 
  var assemblyVersion = appInstance.GetType().BaseType.Assembly.GetName().Version;
  //note the use of the BaseType - see note below
  return assemblyVersion.ToString();
}
Run Code Online (Sandbox Code Playgroud)

注意

您可能想知道为什么代码使用BaseType应用程序实例,而不仅仅是类型.这是因为Global.asax.cs文件是MVC应用程序的主要类型,但随后Asp.Net动态编译另一个通过Global.asax继承的HttpApplication类型.

正如我先前所说; 这适用于大多数MVC站点,因为它们都应该按照惯例在Global.asax.cs文件中定义应用程序类(因为这是项目设置的方式).


Jor*_*dan 5

万一有人碰到这个,这对我有用(MVC5 VS2013).直接进入视图:

@ViewContext.HttpContext.ApplicationInstance.GetType().BaseType.Assembly.GetName().Version.ToString();
Run Code Online (Sandbox Code Playgroud)