我们有一个不使用MVC的网络应用程序。此Web应用程序已在使用Assembly.cs。在我的C#代码中,我可以获得webapplication的版本号,但是如何在网页(.cshtml)中获取它?
我尝试使用
@System.Reflection.Assembly.GetExecutingAssembly().GetName();
但它返回
t0cxczo0, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
不是看起来很熟悉的东西。
当我使用
时@typeof(MyApp.Application).Assembly.GetName()
它编译得很好,但在运行时我得到了
"Cannot find namespace MyApp"
MyApp是我的应用程序的名称,Application是我的一个类。
我也试过
@System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(MyApp.Application).Assembly.Location).ProductVersion
但是那也会返回"找不到命名空间MyApp"错误。
我的webapplication使用其他一些自制二进制文件,这些二进制文件可以在其他Web应用程序中重复使用。当我使用
@System.Reflection.Assembly.GetCallingAssembly().GetName()
我正在获取处理模板内容的其他程序集的名称和版本。所以我越来越近了;)
当我使用
时@System.Reflection.Assembly.GetEntryAssembly().GetName()
我得到了一个"模板执行"错误
当我使用
时@HttpContext.Current.ApplicationInstance
我收到有关HttpContext的错误并不存在。
请建议如何做到这一点应该是一件容易的事。
答案 0 :(得分:2)
在你的使用中
using System.Reflection
using System.Diagnostics
然后在你的c#代码中
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
这就是我们目前在其中一个应用程序中使用的内容。然后我们获取变量“version”并将其分配给控件(webforms)或ViewBag变量。
如果您需要将其传递给ajax请求或从ajax请求传递,我建议您在c#代码中使用web方法。
[System.Web.Services.WebMethod]
public static string GetCurrentAssembly()
{
Assembly assembly = Assembly.GetExecutingAssembly();
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
string version = fileVersionInfo.ProductVersion;
return version;
}
然后通过客户端调用它以使其可用于您的页面。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script type = "text/javascript">
function ShowCurrentAssembly() {
$.ajax({
type: "POST",
url: "CS.aspx/GetCurrentAssembly",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function(response) {
alert(response.d);
}
});
}
function OnSuccess(response) {
alert(response.d);//you can replace this with code to populate an html element
}
</script>
进一步说明:http://www.aspsnippets.com/Articles/Calling-ASPNet-WebMethod-using-jQuery-AJAX.aspx
答案 1 :(得分:0)
它可能不是最通用的选项,但以下代码适用于我的情况:
var uri = new Uri(System.Reflection.Assembly.GetCallingAssembly().CodeBase);
var baseDir = System.IO.Path.GetDirectoryName(uri.LocalPath);
if (baseDir != null)
{
var appLocation = System.IO.Path.Combine(baseDir, "MyApp.dll");
version = System.Diagnostics.FileVersionInfo.GetVersionInfo(appLocation).FileVersion;
}
仅因为GetCallingAssembly是我bin文件夹中的另一个dll。