使用Razor/MVC3将AssemblyVersion获取到网页中时出现问题
本文关键字:网页 问题 获取 Razor MVC3 AssemblyVersion 使用 | 更新日期: 2023-09-27 17:57:47
我在_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
这表明"Executing Assembly"不是我的主要应用程序,而是视图本身。
如何获取ACTUAL应用程序的程序集信息,而不仅仅是单个视图
cshtml/vbhtml是动态编译到程序集。
@typeof(YourApplicationNamespace.MvcApplication).Assembly.GetName().Version
这个怎么样?
这对我很有效。无需明确提及类型。
@ViewContext.Controller.GetType().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("");
}
}
您需要在项目中获得一个类型的程序集:
typeof(MyType).Assembly.Whatever
其中MyType
是MVC项目本身中的任何类型(例如,控制器或模型,或MvcApplication
类)
扩展takepara的答案,如果你想用一行代码从MVC Razor视图中获取AssemblyInformation VersionAttribute:
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(Zeroarc.Candid.Web.MvcApplication).Assembly.Location).ProductVersion
对于一个api控制器,我使用了基于其他答案的
Version = GetType().Assembly.GetName().Version.ToString()
您可以尝试使用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>
转到主控制器,只需复制以下代码:
将ActionResult
重命名为字符串
public string Index()
return typeof(Controller).Assembly.GetName().Version.ToString() ;
run view
您可以使用Name属性获得它,如下所示:
@System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
这就是你要找的吗?