使用Razor/MVC3将AssemblyVersion导入网页时出现问题

Jay*_*ens 100 c# reflection assemblies razor asp.net-mvc-3

我在_Layout.cshtml文件的页脚中使用以下代码将AssemblyInfo版本数据放入我的MVC3站点中每个页面的页脚.然而:

@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
Run Code Online (Sandbox Code Playgroud)

只需在页脚中打印:

Revision 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

当我修改视图以使用以下内容显示"执行装配"的所有装配信息时

@System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()
Run Code Online (Sandbox Code Playgroud)

其中打印以下内容:

Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
Run Code Online (Sandbox Code Playgroud)

这表明"执行程序集"不是我的主要应用程序,它是视图本身.

如何获取ACTUAL应用程序的程序集信息,而不仅仅是单个视图?

小智 211

cshtml/vbhtml是动态编译到程序集.

@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version
Run Code Online (Sandbox Code Playgroud)

这个怎么样?

  • 所有VB.NET的`@GetType(YourApplicationNamespace.MvcApplication).Assembly.GetName.Version`.我们俩. (15认同)
  • 对于WebAPI站点:`@typeof(YourDefaultNamespace.WebApiApplication).Assembly.GetName().Version`.它甚至可以在没有默认命名空间的情况下工作:`@ typeof(WebApiApplication).Assembly.GetName().Version (4认同)
  • 如果有人好奇,`@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version.ToString(3)` 返回程序集版本 4 个部分中的 3 个。您可以在 0 到 4 之间变化。 (2认同)

Jay*_*Jay 15

使用这个助手适合我:

    public static HtmlString ApplicationVersion(this HtmlHelper helper)
    {
        var asm = System.Reflection.Assembly.GetExecutingAssembly();
        var version = asm.GetName().Version;
        var product = asm.GetCustomAttributes(typeof(System.Reflection.AssemblyProductAttribute), true).FirstOrDefault() as System.Reflection.AssemblyProductAttribute;

        if (version != null && product != null)
        {
            return new HtmlString(string.Format("<span>{0} v{1}.{2}.{3} ({4})</span>", product.Product, version.Major, version.Minor, version.Build, version.Revision));
        }
        else
        {
            return new HtmlString("");
        }

    }
Run Code Online (Sandbox Code Playgroud)


Hao*_*aru 11

这适合我.无需明确提及类型.

@ViewContext.Controller.GetType().Assembly.GetName().Version
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 5

您需要在项目中获取类型的程序集:

typeof(MyType).Assembly.Whatever
Run Code Online (Sandbox Code Playgroud)

哪里MyType是任何类型的MVC项目本身(例如,控制器或模型,或MvcApplication阶级)