Jul*_*ian -7 c# createinstance invoke .net-assembly
我在创建静态void Main()的程序集实例时遇到问题.
Heres是程序集的代码(.NET Exe)
namespace Test
{
internal static class Program
{
[STAThread]
private static void Main(string[] args)
Run Code Online (Sandbox Code Playgroud)
这是启动器代码:bin是一个包含从文件读取的程序集的字节数组.
Assembly asm = Assembly.Load(bin);
MethodInfo method = asm.EntryPoint;
object obj = asm.CreateInstance(method.ToString());
method.Invoke(obj, null);
Run Code Online (Sandbox Code Playgroud)
由于参数不匹配,obj始终为null并且Invoke抛出异常.
可执行文件的入口点是一个方法,而方法没有实例,类也没有.
因此,如果您打算创建Main该类的实例,您应该获取DeclaringType该方法的:
object obj = asm.CreateInstance(method.DeclaringType.ToString());
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下没用,因为静态方法没有实例,所以要调用它,所以你只需要省略实例:
method.Invoke(null, null);
Run Code Online (Sandbox Code Playgroud)
如果要使用参数调用方法,请确保在对象数组中为每个参数创建一个条目:
object[] parameters = new object[] { new string[] { "","" } };
method.Invoke(null, parameters);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |