2009-08-30 58 views
3

我想大會友好名稱在當前應用程序域,因此我寫了這樣的事情:獲得大會名稱在當前應用程序域

static void Main(string[] args) 
    { 
     foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies()) 
     { 
      Console.WriteLine(item.FullName); 

     } 
    } 

但問題是,這是輸出我得到了什麼,而不是什麼我希望看到:

mscorlib程序,版本= 2.0.0.0, 文化=中性 公鑰= b77a5c561934e0 ApplicationDomain中,版本= 1.0.0.0, 文化=中性公鑰=正ULL

其實我所期待的那些名字:

alt text http://www.pixelshack.us/images/xjfkrjgwqiag9s6o76x6.png

有人能告訴我,如果有什麼我弄錯了。

在此先感謝。

或者我期待的名稱不是程序集?

回答

4

你不會總是得到漂亮的名字空間的名字,當你使用反射,你得到的組件的真實姓名。

你也不會得到所有引用的庫,只有當前加載的人。如果你在代碼上面添加「XmlDocument foo = new XmlDocument()」,System.XML將會顯示出來。

static void Main(string[] args) 
    { 
     XmlDocument foo = new XmlDocument(); 

     foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies()) 
     { 
      Console.WriteLine(item.FullName); 

     } 
    } 

輸出:

mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
ConsoleApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 
System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
0
foreach(var assem in AppDomain.CurrentDomain.GetAssemblies()) 
    { 
     Console.WriteLine(assem.GetName().Name); 

    } 

Assembly.GetName()返回一個AssemblyName對象,該對象具有Name屬性。這就是你要找的。

+0

這仍返回「MSCORLIB」 – FlySwat 2009-08-30 23:05:51

+0

謝謝,這是好事,知道這一點。 – Tarik 2009-08-30 23:16:06

0

這是不可能在運行過程中得到的所有引用的程序集的列表。即使你在你的visual studio項目中引用它,如果你不使用它們,C#編譯器也會忽略它們,因此它們根本不會把它放到你的輸出文件(exe/dll)中。

併爲您的組件的休息,他們將不會加載,直到它們被實際使用。

AppDomain.CurrentDomain.GetAssemblies()爲您提供所有加載的程序集的數組,這個名單可能是從你在Visual Studio項目中看到很大的不同。

+0

感謝您的答案。真誠。 – Tarik 2009-08-30 23:59:30

0

要麼使用Assemly.GetName()。名稱或使用反射來找到AssemblyTitleAttribute並使用該值。

相關問題