我想大会友好名称在当前应用程序域,因此我写了这样的事情:

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,   培养=中性公钥=空

实际上我期待这些名称:

替代文字http://www.pixelshack.us/images/xjfkrjgwqiag9s6o76x6.png

有人能告诉我,如果有什么我弄错了。

预先感谢。

或者我期待的名字是不是组件?

有帮助吗?

解决方案

您不会总是得到漂亮的名字空间的名字,当你使用反射,你得到的组件的真实姓名。

您也不会得到所有引用的库,只有当前加载的人。如果添加 “XmlDocument的富=新的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

其他提示

这是不可能在运行过程中得到的所有引用的程序集的列表。即使你引用它在你的Visual Studio项目,如果你不使用它们,C#编译器会忽略它们,因此它们不会在所有使它成为你的输出文件(EXE / DLL)。

和您组件的休息,他们将不会加载,直到它们被实际使用。

AppDomain.CurrentDomain.GetAssemblies()给你所有加载的程序集的数组,这个名单可能是从你在Visual Studio项目中看到非常不同的。

    foreach(var assem in AppDomain.CurrentDomain.GetAssemblies())
    {
        Console.WriteLine(assem.GetName().Name);

    }

Assembly.GetName()返回其具有名称属性AssemblyName对象。这就是你要找的内容。

既可以使用Assemly.GetName()。名称或使用反射找到AssemblyTitleAttribute并使用该值。

scroll top