我想在当前应用程序域中获取程序集友好名称,因此我写了类似这样的内容:
static void Main(string[] args)
{
foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(item.FullName);
}
}
但问题是这是我得到的输出而不是我想看到的:
mscorlib,版本= 2.0.0.0, 文化=中性, 公钥= b77a5c561934e0 ApplicationDomains,版本= 1.0.0.0, Culture = neutral,PublicKeyToken = null
其实我在期待这些名字:
alt text http://www.pixelshack.us/images/xjfkrjgwqiag9s6o76x6.png
有人可以告诉我是否有错误。
提前致谢。
或者我期待的名字不是集会?
答案 0 :(得分: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
答案 1 :(得分:1)
在运行时期间无法获取所有引用程序集的列表。即使你在visual studio项目中引用它,如果你不使用它们,C#编译器也会忽略它们,因此它们根本不会进入你的输出文件(exe / dll)。
对于其余的程序集,它们在实际使用之前不会被加载。
AppDomain.CurrentDomain.GetAssemblies()
为您提供所有已加载程序集的数组,此列表可能与您在visual studio项目中看到的非常不同。
答案 2 :(得分:0)
foreach(var assem in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(assem.GetName().Name);
}
Assembly.GetName()返回一个具有Name属性的AssemblyName对象。这就是你要找的东西。
答案 3 :(得分:0)
使用Assemly.GetName()。Name或使用反射来查找AssemblyTitleAttribute并使用该值。