C# 获取当前应用程序域中的程序集名称
我希望在当前应用程序域中获得程序集友好的名称,因此我编写了如下内容:C# 获取当前应用程序域中的程序集名称,c#,.net,applicationdomain,C#,.net,Applicationdomain,我希望在当前应用程序域中获得程序集友好的名称,因此我编写了如下内容: static void Main(string[] args) { foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies()) { Console.WriteLine(item.FullName); } } 但问题是这是我得到的输出
static void Main(string[] args)
{
foreach (System.Reflection.Assembly item in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(item.FullName);
}
}
但问题是这是我得到的输出,而不是我想要看到的:
mscorlib,版本=2.0.0.0,
文化=中立,
PublicKeyToken=b77a5c561934e0
应用程序域,版本=1.0.0.0,
区域性=中性,PublicKeyToken=空
事实上,我期待着这些名字:
有没有人能告诉我我是不是弄错了什么
提前谢谢
或者我期待的名字不是集合
foreach(var assem in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(assem.GetName().Name);
}
GetName()返回具有Name属性的AssemblyName对象。这就是您要寻找的。当您使用反射时,您不会总是获得漂亮的名称空间名称,而是获得程序集的真实名称 您也不会得到所有引用的库,只有当前加载的库。如果在代码上方添加“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
在运行时无法获取所有引用程序集的列表。即使您在VisualStudio项目中引用它,如果您不使用它们,C#编译器也会忽略它们,因此它们根本不会将其放入您的输出文件(exe/dll)中 对于其余的程序集,它们在实际使用之前不会被加载
AppDomain.CurrentDomain.GetAssemblys()
提供了所有已加载程序集的数组,此列表可能与visual studio项目中的列表非常不同。使用Assemly.GetName().Name或使用反射查找AssemblyTitleAttribute并使用该值 这仍然返回“MsCorLib”,谢谢你的回答。真诚地