Search code examples
c#dllassembliespublickeytoken

How to get public methods from Dll using C# when publickeytoken == null


I want to find Public userdefined function from a dll when 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);
        }
    }
}

How to solve this

Even i Tried this to Find publictokenkey it retruns 0 bytes

           byte[] b = Assembly.GetExecutingAssembly().GetName().GetPublicKeyToken();

Solution

  • Your binding flags are wrong and you can use ass directly:

    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);
            }
        }
    }