在运行时以编程方式添加DLL

时间:2011-01-17 08:27:02

标签: c# .net dll

使用C#,我在运行时创建了一个DLL,现在我想在运行时添加它作为对项目的引用。

我尝试使用LoadFrom方法,但它不起作用。

我该怎么做?

7 个答案:

答案 0 :(得分:25)

首先你应该加载dll

Assembly assembly = Assembly.LoadFrom("dllPath");

然后,您可能需要将程序集添加到应用程序域

AppDomain.CurrentDomain.Load(assembly.GetName());

之后,您可以从此程序集中加载任何类型

Type t = assembly.GetType("typeName");

然后使用反射,您可以在此类型上执行方法

请注意,您可能需要在配置文件中添加以下内容。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="dlls folder"/>
  </assemblyBinding>
</runtime>

答案 1 :(得分:8)

LoadFile与LoadFrom

  

小心 - 这些不一样   的事情。

     

LoadFrom()通过Fusion而且可以   被重定向到另一个组件   不同的路径,但同样的道路   身份如果已加载   LoadFrom上下文。的LoadFile()   根本没有通过Fusion绑定 -   装载机只是前进并加载   正好*调用者要求的内容。它   不使用Load或   LoadFrom上下文。所以,LoadFrom()   通常会给你你所要求的,   但不一定。 LoadFile()用于   那些真正非常想要的人   什么是要求。 (*但是,开始   在v2中,政策将适用于两者   LoadFrom()和LoadFile(),等等   LoadFile()不一定是   究竟是什么要求。也,   从v2开始,如果是一个程序集   它的身份在GAC中,即GAC   将使用副本。使用   ReflectionOnlyLoadFrom()加载   正是你想要的 - 但是,请注意   以这种方式加载的程序集不能   执行。)

     

LoadFile()有一个catch。既然如此   它不使用绑定上下文   依赖关系不是自动的   在其目录中找到。如果他们不是   你可以在Load上下文中找到它   必须订阅   AssemblyResolve事件以便绑定   他们。

ref Suzanne Cook's .NET CLR Notes

答案 2 :(得分:4)

使用Assembly.LoadFile方法,然后使用反射在其中运行代码。

答案 3 :(得分:2)

实际上Assembly.Loadusually what you'd want,而不是LoadFrom而不是LoadFile

  

哪种情况适合您?在   一般来说,我强烈建议你   尽可能使用Load上下文

http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx

答案 4 :(得分:1)

项目已在运行时,无法将dll添加到项目中。但是,您可以使用Assembly.LoadFrom(filename)加载dll。通常,此类scenerio用于SOA或基于插件的项目。您可以使用interface指定类型结构并加载dll并使用它。

答案 5 :(得分:0)

您可以使用Assembly.LoadFrom方法在运行时动态加载程序集。

答案 6 :(得分:0)