使用Razor / MVC3将AssemblyVersion变成网页的问题

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

@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() 

只需打印在页脚中:

 Revision 0.0.0.0 

当我修改视图来显示“执行程序集”的所有程序集信息使用以下

 @System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString() 

其中打印以下内容:

 Revision App_Web__layout.cshtml.639c3968.hlogy75x, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 

这表明“执行大会”不是我的主要应用程序,它是视图本身。

我如何获得实际应用程序的汇编信息,而不仅仅是单个视图?

cshtml / vbhtml是dynamic编译的程序集。

 @typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version 

这个怎么样?

使用这个帮手为我工作:

  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(""); } } 

你需要在项目中获得一个types的程序集:

 typeof(MyType).Assembly.Whatever 

其中, MyType是MVC项目本身的任何types(例如,控制器或模型,或MvcApplication类)

这对我有用

 @ViewContext.Controller.GetType().Assembly.GetName().Version 

如果你想从一个MVC剃刀视图中获得AssemblyInformationalVersionAttribute的一个class轮,扩展takepara的答案:

 @System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion 

您可以尝试使用GetCallingAssembly()。 我不确定这个调用堆栈是否足够高,但是因为Razor实际上为每个视图创build了一个程序集,所以我们认为你的应用程序将是视图程序集的调用程序集。

我的问题是,我以后重命名了命名空间,我得到了上面的错误。 问题是Views \ Web.config中旧的命名空间参考。 我不得不将其从Project.WebAPI17更改为Company.Project.WebAPI17

  <system.web.webPages.razor> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> <add namespace="Company.Project.WebAPI17" /> </namespaces> </pages> </system.web.webPages.razor> 

您可以使用名称属性如下所示:

  @System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; 

那是你在找什么?