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

问题描述

|| 我在_Layout.cshtml文件的页脚中使用以下代码,将AssemblyInfo版本数据放入MVC3站点中每个页面的页脚中。然而:
@System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()
只需在页脚中打印:
Revision 0.0.0.0
当我修改视图以使用以下命令显示\“ Executing Assembly \”的所有程序集信息时
@System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()
打印以下内容
Revision App_Web__layout.cshtml.639c3968.hlogy75x,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null
这表明\“ Executing Assembly \”不是我的主要应用程序,而是视图本身。 如何获得ACTUAL应用程序的装配信息,而不仅仅是单个视图?     

解决方法

        cshtml / vbhtml是动态编译为汇编的。
@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(\"\");
        }

    }
    ,        这对我有用。无需明确提及类型。
@ViewContext.Controller.GetType().Assembly.GetName().Version
    ,        您需要在项目中获取类型的程序集:
typeof(MyType).Assembly.Whatever
在MVC项目本身中,ѭ8是任何类型(例如,控制器或模型或
MvcApplication
类)     ,        如果要一个衬板从MVC剃刀视图获取AssemblyInformationalVersionAttribute,请扩展takepara的答案:
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
    ,        您可以尝试使用GetCallingAssembly()。我不确定在调用堆栈中是否足够高,但是由于Razor实际上为每个视图创建了一个程序集,因此可以推断您的应用将成为该视图程序集的调用程序集。     ,        我的问题是我此后重命名了命名空间,但出现了上面的错误。 问题是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>
    ,        您可以使用Name属性获得它,如下所示:
  @System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
那是您要找的东西吗?     ,        转到Home Controller并复制以下代码: 将ѭ15重命名为字符串
public string Index()

   return typeof(Controller).Assembly.GetName().Version.ToString() ;

run view