问题描述
||
我在_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