在当前应用程序域中获取程序集名称

时间:2009-08-30 22:57:14

标签: c# .net applicationdomain

我想在当前应用程序域中获取程序集友好名称,因此我写了类似这样的内容:

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

有人可以告诉我是否有错误。

提前致谢。

或者我期待的名字不是集会?

4 个答案:

答案 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并使用该值。