"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);
我有以下问题:
我正在使用 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);