如何使用c#为程序集添加引用

本文关键字:添加 引用 程序集 何使用 | 更新日期: 2023-09-27 18:10:45

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

public void addreference()
{
//needed code
}
public addInvocation()
{

//write in the file of business class
}

它就像使用鼠标选择添加引用,但我希望使用c#来完成它我该怎么做?


关键解决方案我试图使用解决方案,但我发现了一个问题,我成功地实例化了库的类,但我不能使用它们的方法

首先我创建了一个名为Interface1的接口其次,我创建了一个名为class1的类然后生成。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);

现在我想调用add方法,我该怎么做呢

如何使用c#为程序集添加引用

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;
}

反射似乎是显而易见的选择。以

开头
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);

…或者类似的东西。它不会编译,但会得到列表。