题
我想大会友好名称在当前应用程序域,因此我写了这样的事情:
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并使用该值。
不隶属于 StackOverflow