![](/img/trans.png)
[英]programmatically add dependentAssembly to runtime\assemblyBinding
[英]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事件才能綁定它們。
使用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.