2013-11-26 52 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 %> /> 
相關問題