在ASP.NET中读取AssemblyTitle属性

时间:2011-09-06 12:40:03

标签: asp.net reflection .net-assembly

我使用下面的代码来读取.NET应用程序的AssemblyTitle属性,不幸的是,Assembly.GetEntryAssembly()总是在ASP.NET应用程序中返回Null。如何在ASP.NET应用程序中阅读AssemblyTitle?

  public static string Title
  {
      get
      {
          var attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
          if (attributes.Length > 0)
          {
              var titleAttribute = (AssemblyTitleAttribute)attributes[0];
              if (titleAttribute.Title.Length > 0)
                  return titleAttribute.Title;
          }
          return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly().CodeBase);
      }
  }

2 个答案:

答案 0 :(得分:4)

您必须拥有一个您知道的类型,该类型在包含AssemblyTitle的同一程序集中定义。然后你可以这样做:

typeof(MyType).Assembly.GetCustomAttributes

请注意(据我所知),没有任何其他防弹方法。

例如,如果您不想在Web请求期间执行此操作,则使用HttpContext.Current不起作用(因此您可以在响应用户操作时执行此操作,但不能从单独的线程或静态执行此操作初始化程序,或来自global.asax

一些类似的读数(半成功):

GetEntryAssembly for web applications

Using the Web Application version number from an assembly (ASP.NET/C#)

答案 1 :(得分:2)

我在asp.net web app中使用以下内容:

if (ApplicationDeployment.IsNetworkDeployed)
    return ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

编辑:对不起,那就是版本,而不是标题!我把你的版本和我的版本结合起来了:

System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 

这样可以获得程序集标题属性。区别在于GetExecutingAssembly()GetEntryAssembly()