如何使用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方法,我该怎么做呢
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);
…或者类似的东西。它不会编译,但会得到列表。