-1

我正在 Visual Studio 2010 中编写应用程序,我想使用 c# 添加一个库到引用,所以我将在业务类的文件中添加使用库和调用

public void addreference()
{

//needed code
}

public addInvocation()
{


//write in the file of business class
}

这就像使用鼠标选择添加引用,但我希望使用 c# 来做到这一点,我该 怎么做?


关键解决方案 我尝试使用该解决方案但我发现了一个问题,我成功实例化了库的类但我无法使用他们的方法

首先我创建了一个名为 Interface1 的接口,其次我创建了一个名为 Classe1 的类,然后我生成了 .dll

编码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary1
{
  public   interface Interface1
    {

         int add();
         int sub();
    }


  public class Class1 : Interface1
  {
      Class1()
      {

      }


      #region Interface1 Members

      public int add()
      {
          return 10;
      }

      public int sub()
      {
          return -10;
      }

      #endregion
  }
}

我绑定到实例化class1 的代码

 string relative = "ClassLibrary1.dll";
 string absolute = Path.GetFullPath(relative);

Assembly assembly = Assembly.LoadFile(absolute);
System.Type assemblytype = assembly.GetType("ClassLibrary1.Class1");

object a = assembly.CreateInstance("ClassLibrary1.Class1", false,           BindingFlags.CreateInstance, null,null,null, null);

现在我希望调用方法添加我该怎么做

4

2 回答 2

1

反射似乎是显而易见的选择。从...开始

foreach (FileInfo dllFile in exeLocation.GetFiles("*.dll"))
{

    Assembly assembly = Assembly.LoadFile(dllFile.FullName);

        ...

然后:

Type[] exportedTypes = assembly.GetExportedTypes();
foreach (Type exportedType in exportedTypes)
{
    //look at each instantiable class in the assembly
    if (!exportedType.IsClass || exportedType.IsAbstract)
    {
        continue;
    }

//get the interfaces implemented by this class
Type[] interfaces = exportedType.GetInterfaces();
foreach (Type interfaceType in interfaces)
{
    //if it implements IMyPlugInterface then we want it
    if (interfaceType == typeof(IMyPlugInterface))
    {
        concretePlugIn = exportedType;
        break;
    }
}

最后

IMyPlugInterface myPlugInterface = (IMyPlugInterface) Activator.CreateInstance(concretePlugIn);

...或类似的东西。它不会编译,但仍会得到 jist。

于 2013-04-25T10:28:44.243 回答
1
var a = Activator.CreateInstance(assemblytype, argtoppass);
System.Type type = a.GetType();
if (type != null)
{
  string methodName = "methodname";
  MethodInfo methodInfo = type.GetMethod(methodName);
  object resultpath = methodInfo.Invoke(a, argtoppass);
  res = (string)resultpath;
}
于 2013-05-09T08:10:35.150 回答