2013-11-26 51 views
0

我试图获得通过代码项目名称(TestGetAssemblyName)(组装):如何在ASP.NET C#代码通过获得项目名称

enter image description here

我试过System.Reflection.Assembly.GetExecutingAssembly().GetName().Name但这会返回一些奇怪的混乱的字符,看起来动态生成。有没有办法让TestGetAssemblyName通过代码返回给我?

回答

1

您在解决方案资源管理器中读取的内容与编译后的程序集名称或程序集标题完全无关。此外,它不会被编写在编译程序集的任何位置,因此您无法从代码中访问该名称。

假设MyType是在汇编中定义,你可以使用AssemblyTitleAttribute属性(通常在AssemblyInfo.cs定义)阅读给定标题(无关编译的程序集名称或代码命名空间)类型:(AssemblyTitleAttribute

var assembly = typeof(MyType).Assembly; 
var attribute = assembly 
    .GetCustomAttributes(typeof(AssemblyTitleAttribute), true) 
    .OfType<AssemblyTitleAttribute>() 
    .FirstOrDefault(); 

var title = attribute != null ? attribute.Title : ""; 

这只是AssemblyInfo.cs中定义的属性之一,请选择最符合您要求的属性。

另一方面,您可以使用程序集名称(Name属性Assembly)来获取已编译的程序集名称(也可能不同于程序集标题和项目标题)。

编辑
为了让单行你必须把它放在你的代码的地方(当然!):

public static class App 
{ 
    public static string Name 
    { 
     get 
     { 
      if (_name == null) 
      { 
       var assembly = typeof(App).Assembly; 
       var attribute = assembly 
        .GetCustomAttributes(typeof(AssemblyTitleAttribute), true) 
        .OfType<AssemblyTitleAttribute>() 
        .FirstOrDefault(); 

       _name = attribute != null ? attribute.Title : ""; 
      } 

      return _name; 
     } 
    } 

    private string _name; 
} 

为了用作:

<a href="server/App?appName=<% App.Name %> /> 
相关问题