当publickeytoken==null时,如何使用C#从Dll获取公共方法
当当publickeytoken==null时,如何使用C#从Dll获取公共方法,c#,dll,assemblies,publickeytoken,C#,Dll,Assemblies,Publickeytoken,当publickeytoken==null OpenFileDialog obj = new OpenFileDialog(); if (obj.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Assembly ass = Assembly.LoadFrom(obj.FileName); // Here its getting Exception because Publickeytoken == null;
publickeytoken==null
OpenFileDialog obj = new OpenFileDialog();
if (obj.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Assembly ass = Assembly.LoadFrom(obj.FileName);
// Here its getting Exception because Publickeytoken == null;
Assembly a = Assembly.LoadWithPartialName(ass.FullName);
Type[] types = a.GetTypes();
foreach (Type type in types)
{
if (!type.IsPublic)
{
continue;
}
MemberInfo[] members = type.GetMembers(BindingFlags.Public
| BindingFlags.Instance
| BindingFlags.InvokeMethod);
foreach (MemberInfo member in members)
{
Console.WriteLine(type.Name + "." + member.Name);
}
}
}
如何解决这个问题
甚至我也试着用它来找到publictokenkey
0字节
byte[] b = Assembly.GetExecutingAssembly().GetName().GetPublicKeyToken();
您的绑定标志错误,您可以直接使用
ass
:
OpenFileDialog obj = new OpenFileDialog();
if (obj.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Assembly ass = Assembly.LoadFrom(obj.FileName);
foreach(var type in ass.GetTypes())
{
MethodInfo[] members = type.GetMethods(BindingFlags.Public | BindingFlags.Instance);
foreach (MemberInfo member in members)
{
Console.WriteLine(type.Name + "." + member.Name);
}
}
}
你有什么例外?另外,LoadWithPartialName已经过时,您应该使用Load。为什么不直接使用assembly对象“ass”?因为你刚刚从dll加载了它?好的,告诉我一个从dll中查找公共方法的解决方案检查一些dll的示例它的工作。。。有些不起作用?我能做的是获取此消息。有关调用即时(JIT)调试而不是此对话框的详细信息,请参阅此消息的结尾。*******************异常文本************************System.ReflectionTypeLoadException:无法加载一个或多个请求的类型。有关详细信息,请检索LoaderExceptions属性。在System.Reflection.Assembly.GetTypes()处的System.Reflection.RuntimeModule.GetTypes()处的System.Reflection.RuntimeModule.GetTypes(RuntimeModule模块)处,使用try catch(foreach(var type…)语句)围绕它,查看loaderExceptions以获取更多信息