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

时间:2012-02-28 17:02:20

标签: c# asp.net-mvc asp.net-mvc-3 reflection

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

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

谢谢!

3 个答案:

答案 0 :(得分: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();
}

注意

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

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

答案 1 :(得分:5)

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

@ViewContext.HttpContext.ApplicationInstance.GetType().BaseType.Assembly.GetName().Version.ToString();

答案 2 :(得分:1)

只需搜索应该是您的版本号来源的程序集

AppDomain.CurrentDomain.GetAssemblies().Where(a => a.GetName().Name.Equals("MyDll")).First().GetName().Version.ToString();