Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当publickeytoken==null时,如何使用C#从Dll获取公共方法_C#_Dll_Assemblies_Publickeytoken - Fatal编程技术网

当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以获取更多信息