Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC:如何从HtmlHelper实例获取程序集信息?_C#_Asp.net Mvc_Asp.net Mvc 3_Reflection - Fatal编程技术网

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

C# ASP.NET MVC:如何从HtmlHelper实例获取程序集信息?,c#,asp.net-mvc,asp.net-mvc-3,reflection,C#,Asp.net Mvc,Asp.net Mvc 3,Reflection,我在一个独立于MVC应用程序集的程序集中有一个HtmlHelper扩展方法。在扩展方法中,我想获得MVC应用程序集的版本号。这可能吗 调用程序集是razor视图动态程序集,因此这没有帮助。HtmlHelper中是否有嵌套的对象可以为我提供MVC应用程序集的版本号?我一直在探索这个问题,但到目前为止还没有找到解决问题的办法 谢谢 这是一件臭名昭著的坏事——因为不幸的是,没有一种具体可靠的方法可以做到这一点 然而,由于它是一个MVC应用程序,所以它有一个Global.asax.cs-因此它有一个本地

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

调用程序集是razor视图动态程序集,因此这没有帮助。HtmlHelper中是否有嵌套的对象可以为我提供MVC应用程序集的版本号?我一直在探索这个问题,但到目前为止还没有找到解决问题的办法


谢谢

这是一件臭名昭著的坏事——因为不幸的是,没有一种具体可靠的方法可以做到这一点

然而,由于它是一个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文件中定义一个应用程序类(因为这是项目的设置方式)。

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

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

万一有人遇到这一点,以下是对我有用的东西(MVC5 VS2013)。直接进入视图:

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

@这是正确的,我想要我的mvc应用程序汇编版本。谢谢!关于基类型的注释是正确的。这就是绊倒我的原因。也很好奇。。。你为什么说这是“臭名昭著的邪恶”?你的解决方案似乎很直截了当。有没有这样做会失败的实例?@JohntheRevelator-如果你在所有asp.net站点上都这么做(即,不一定通过HtmlHelper),那么它就要复杂得多,因为许多站点没有这样一个固定的应用程序类。对于MVC站点,如果站点仅使用global.asax,则可能会出现问题,在这种情况下,主dll中将没有应用程序类。但正如我所说,我相信大多数网站都会有一个,因为这是默认的做事方式