将控制台程序转换为DLL并保留参数

4

我有一个曾经是控制台程序的dll,它仍然有使用“static Main(string[] args)”的代码,当我加载DLL时是否有一种方法可以传递args参数?

我正在使用:

Assembly assembly = Assembly.LoadFrom("App.dll");
Type type = assembly.GetType("App.LoadFile");
var instance = Activator.CreateInstance(type,new string[] { filepath });
1个回答

2

仅仅通过在第二个程序中加载程序集,Main方法不会被调用。你只需要在上面的type上调用Main方法。

以下是如何从你的代码中调用静态Main方法...

var assembly = Assembly.LoadFrom("App.dll");
var type = assembly.GetType("App.LoadFile");

var args = new string[] { filepath };

var main = type.GetMethod("Main", 
    System.Reflection.BindingFlags.Static
    | System.Reflection.BindingFlags.NonPublic
    | System.Reflection.BindingFlags.InvokeMethod
    );

main.Invoke(null, new object[] { args });

谢谢!那就是我缺少的。 - Jason
然而,当我关闭DLL表单时,父进程并没有关闭。 - Jason
你是说当另一个“Main”方法运行完毕后,你希望程序退出?听起来你只需要在完成后调用Application.Exit()即可。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接