簡體   English   中英

在運行時以編程方式添加DLL

[英]Add DLL programmatically at runtime

使用C#,我在運行時創建一個DLL,現在我想在運行時將它添加為我的項目的引用。

我嘗試使用LoadFrom方法,但它不起作用。

我怎樣才能做到這一點?

首先你應該加載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>

LoadFile與LoadFrom

小心 - 這些不是一回事。

LoadFrom()通過Fusion,可以重定向到另一個路徑,但是如果已經在LoadFrom上下文中加載了相同的身份,則可以使用相同的身份。 LoadFile()根本沒有通過Fusion綁定 - 加載器只是繼續並正好加載*調用者請求的內容。 它不使用Load或LoadFrom上下文。 因此,LoadFrom()通常會為您提供所要求的內容,但不一定如此。 LoadFile()適用於那些真正非常想要的人。 (*但是,從v2開始,策略將應用於LoadFrom()和LoadFile(),因此LoadFile()不一定完全是請求的內容。另外,從v2開始,如果具有其標識的程序集在GAC,將使用GAC副本。使用ReflectionOnlyLoadFrom()來加載您想要的 - 但是,請注意,無法執行以這種方式加載的程序集。)

LoadFile()有一個catch。 由於它不使用綁定上下文,因此不會在其目錄中自動找到其依賴項。 如果它們在Load上下文中不可用,則必須訂閱AssemblyResolve事件才能綁定它們。

參考Suzanne Cook的.NET CLR筆記

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

實際上Assembly.Load 通常是你想要的 ,而不是LoadFrom而不是LoadFile

哪種情況適合您? 一般來說,我強烈建議您盡可能使用Load上下文

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

項目已在運行時,您無法將dll添加到項目中。 但是,您可以使用Assembly.LoadFrom(filename)加載dll。 通常,此類scenerio用於SOA或基於插件的項目。 您可以使用interface指定類型結構並加載dll並使用它。

您可以使用Assembly.LoadFrom方法在運行時動態加載程序集。

這在.NET中非常簡單: http//msdn.microsoft.com/en-us/library/1009fa28.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM