【问题标题】:ASP.NET MVC: How to obtain assembly information from HtmlHelper instance?ASP.NET MVC:如何从 HtmlHelper 实例获取程序集信息?
【发布时间】:2012-02-28 17:02:19
【问题描述】:

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    这是出了名的邪恶——因为不幸的是,没有一种特定的可靠方法可以做到这一点。

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

    【讨论】:

    • @KirkWoll 没错,我想要我的 mvc 应用程序汇编版本。
    • 谢谢!您关于 BaseType 的注释是正确的。这就是让我绊倒的原因。
    • 也很好奇……你为什么说它是“臭名昭著的邪恶”?您的解决方案似乎很简单。是否有任何情况会失败?
    • @JohntheRevelator - 如果您正在考虑在所有 asp.net 网站上执行此操作(即不一定通过 HtmlHelper),那么它会更加棘手,因为许多没有像这样的固定应用程序类。对于 MVC 站点,如果站点仅使用 global.asax,则可能会出现问题,在这种情况下,主 dll 中将没有应用程序类。但正如我所说,我相信大多数网站都会有一个,因为它是默认的做事方式
    【解决方案2】:

    以防万一有人遇到这种情况,这对我有用(MVC5 VS2013)。直接进入视图:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-10
        • 2015-11-16
        • 2022-06-11
        • 1970-01-01
        相关资源
        最近更新 更多