"Assembly.EntryPoint.Invoke" [C#] 的问题

Trouble with "Assembly.EntryPoint.Invoke" [C#]

我有以下问题:
我正在使用 Microsoft.CSharp 中的 CSharpCodeProvider 在运行时编译 C# 代码。如果我双击生成的文件,创建的应用程序运行完美。

但是,如果我使用 Assembly.Load 加载我创建的程序集并使用 Assembly.Load("...").EntryPoint.Invoke(null, null) 调用入口点方法,我会得到一个 NullReferenceException


NullReferenceException 指的是 .EntryPoint-属性.
的值 当我调试包含已加载程序集的变量时,VisualStudio 显示以下内容:


Larger image

错误是德语,意思是"local" 或参数"asm" 的值在此指令指针中不可用,因此无法确定。它可能已在优化过程中被删除。


我想在这一点上补充一点,我生成的程序集是 优化的(我还添加了编译器参数 /optimize-,这会阻止优化。)
我通过尝试此代码执行了其他测试以确定错误源:

Assembly asm = Assembly.LoadFile(Assembly.GetExecutingAssembly().Location);

asm.EntryPoint.Invoke(null, argv);

此代码还在包含 Invoke 调用的行中抛出 NullReferenceException


这里有人知道这个错误是从哪里来的,我可以解决吗?
非常感谢 :)


编辑:

入口点方法定义如下:

namespace tmp
{
   public static class Program
   {
      [STAThread]
      public static void Main(string[] argv)
      { ... }
   }
}

我也试过用.EntryPoint.Invoke(null, new string[]{"test", "argument"})调用它,但没有解决问题:/

编辑 #2: 我发现了我的错误 - 请查看 @Hans Passant 和我自己的评论以获得解决方案

~关闭~

如果你尝试这样的事情会成功吗?

Assembly asm = Assembly.LoadFile(Assembly.GetExecutingAssembly().Location);
MethodInfo myMethod = asm.EntryPoint;
myMethod.Invoke(null, args); 

假设您知道要调用的方法

复制并粘贴:

// Get your assembly.
Assembly asm = Assembly.LoadFile(Assembly.GetExecutingAssembly().Location);

// Get your point of entry.
MethodInfo entryPoint = asm.EntryPoint;

// Invoke point of entry with arguments.
entryPoint.Invoke(null, new object[] { new string[] { "arg1", "arg2", "etc" } } );

如果您想从嵌入式资源访问程序集,请使用此代码段:

byte[] yourResource = Properties.Resources.YourResourceName;

Assembly asm = Assembly.Load(yourResource);