在非mvc应用程序的网页上显示汇编版本

本文关键字:显示 汇编 版本 网页 mvc 应用程序 在非 | 更新日期: 2023-09-27 18:11:13

我们有一个不使用MVC的web应用程序。这个web应用程序已经在使用Assembly.cs。在我的c#代码中,我可以获得web应用程序的版本号,但如何在网页(.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

但是这也会返回"Cannot find namespace MyApp"错误。

我的web应用程序使用了一些其他自制的二进制文件,这些文件可以在其他web应用程序中重用。当我使用

@System.Reflection.Assembly.GetCallingAssembly().GetName()

我正在获取处理模板的其他程序集的名称和版本。我离目标越来越近了;)

当我使用

@System.Reflection.Assembly.GetEntryAssembly().GetName()

我得到一个"模板执行"错误

当我使用

@HttpContext.Current.ApplicationInstance

我得到一个错误关于HttpContext不存在。

在非mvc应用程序的网页上显示汇编版本

你试过吗?

使用

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请求,我建议在你的c#代码中使用webmethod。

[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

这可能不是最通用的选项,但以下代码在我的情况下是有效的:

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是另一个dll,它在我的bin文件夹