我在做什么:

byte[] bytes = File.ReadAllBytes(@Application.StartupPath+"/UpdateMainProgaramApp.exe");
Assembly assembly = Assembly.Load(bytes);
// load the assemly

//Assembly assembly = Assembly.LoadFrom(AssemblyName);

// Walk through each type in the assembly looking for our class
MethodInfo method = assembly.EntryPoint;
if (method != null)
{
    // create an istance of the Startup form Main method
    object o = assembly.CreateInstance(method.Name);
    // invoke the application starting point
    try
    {
        method.Invoke(o, null);
    }
    catch (TargetInvocationException e)
    {
        Console.WriteLine(e.ToString());
    }
}

问题在于,它抛出了TargetInvocationException-它发现该方法是main方法,但是由于此行而引发了此异常:
object o = assembly.CreateInstance(method.Name);
o保持为空。因此,我对该堆栈跟踪进行了深入研究,实际的错误是这样的:



我究竟做错了什么?

最佳答案

入口点方法是静态的,因此应使用“实例”参数的空值来调用它。尝试用以下命令替换Assembly.Load行之后的所有内容:

assembly.EntryPoint.Invoke(null, new object[0]);

如果入口点方法不是公共(public)的,则应使用允许指定BindingFlags的Invoke重载。

关于c# - 如何将程序集加载到内存中并执行它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5837958/

10-15 08:26