编写解决方案中引用DLL或项目的替代方案

时间:2017-07-21 13:25:47

标签: c# visual-studio-2012 dll reference wrapper

我想不出这个问题的正确标题。但这是我的困境:

我有一个超过5个项目的解决方案。我关注其中的3个项目,让他们称之为项目 A ,项目 B 和项目 C 。项目 A在B 中引用, B在C 中引用。 (即,B指的是A,C指的是B)

我需要调用项目C中的一个函数,该函数属于A中的一个类。

我的问题是我不能在C中引用项目A,因为它会破坏构建。我试图创建一个属于B的类的对象,并通过该对象调用该函数。但这引发了一个错误,需要引用A。

有没有办法在不包含引用的情况下调用该函数?

我的一位同事建议在B中创建一个包装类,它将A中的函数作为一种变通方法来调用。但我怀疑它会有所帮助,因为在C中创建包装类的对象会再次引发对A的引用要求。

1 个答案:

答案 0 :(得分:0)

作为一种解决方法,您可以通过反思来实现:

Assembly asm = Assembly.LoadFile(@"pathToDllHere\ProjectA.dll");

Type t = asm.GetType("ProjectA.ClassName");

MethodInfo methodInfo = t.GetMethod("MyMethod", new Type[] { typeof(string), typeof(int) });

Object o = Activator.CreateInstance(t);

object[] parameters = new object[2]
{
    "sample parameter", 1337
};

var result = methodInfo.Invoke(o, parameters);

Console.WriteLine(result);

ProjectA.ClassName的位置如下:

public class ClassName
{
    public string MyMethod(string a, int b)
    {
        return "called from A";
    }
}