【问题标题】:C# Call Method in EXEEXE中的C#调用方法
【发布时间】:2019-02-02 19:47:20
【问题描述】:

我有两个 C# DotNet 可执行文件:PARENT.EXE 和 CHILD.EXE。使用 Visual Studio 2010 构建。

我想从 PARENT.EXE 加载和调用 CHILD.EXE 中的方法。到目前为止,我已经能够使用 Assembly.LoadFrom 将 CHILD.EXE 作为程序集加载。但是,我不清楚如何调用CHILD.EXE中的方法。

CHILD.EXE 类如下所示:

namespace childnamespace;
public class childclass;
public string childmethod()
{
  return "hello world";
}

我想从 PARENT.EXE 调用 childmethod() 并取回字符串 "hello world"

我看到很多关于如何将 EXE 作为程序集加载的文章,但没有看到如何在该程序集中实际调用方法。


补充信息:感谢@MJ的回复我在PARENT.EXE中有以下代码

using System;
using System.Reflection;
using System.Diagnostics;
public static class ConsoleTest
{
    public static void Main()
    {
        Assembly SampleAssembly;
        try
        {
            SampleAssembly = Assembly.LoadFrom("child.exe");
            MethodInfo Method = 
              SampleAssembly.GetType("childnamespace.childclass").GetMethod("childmethod");
            if (Method != null)
            {
                Method.Invoke(null, null);  // exception here
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
        }
    }
}

但是我在指示的行收到以下异常:

调用的目标已抛出异常。

内部异常:

值不能为空。

【问题讨论】:

  • 自从我上次使用VS以来已经很久了,但是您不能在PARENT中添加对CHILD的引用并简单地使用CHILD程序集中的类型吗?
  • 为什么child是exe而不是dll?
  • @Damien_The_Unbeliever - 说来话长,但必须这样。
  • @MargaretBloom - 这是我最初尝试的。我将 CHILD.EXE 添加到 References.CS 并没有抱怨。但后来我尝试添加关联的using 行,它拒绝了所有内容。我尝试了所有这些:using childusing childnamespaceusing childclassusing childmethod 都没有运气。
  • new childnamespace.childclass.childmethod() 如果您将其添加为引用...如果通过 LoadFrom 那么您必须使用反射

标签: c# windows visual-studio-2010 .net-assembly


【解决方案1】:

使子方法成为静态方法。

.GetType("childnamespace.childclass").GetMethod("childmethod").Invoke(null, null);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多