簡體   English   中英

共享DLL而不添加參考

[英]Sharing dll without adding reference

我在開發服務器上的共享文件夾中放置了一個dll。 有什么方法可以使用該dll,而無需在我的應用程序中添加引用,也無需在GAC中安裝該dll。

提前致謝。

Assembly asm = Assembly.LoadFrom(path);

有關后期綁定,反射等信息,請參見MSDN。

小修改:帶有關鍵字“ as”的變量正在引起麻煩。 因此,將“ Assembly as”更改為“ Assembly asm”應該更安全。

您可能要查看托管擴展框架或基本框架中的Assembly.Load...

但是,為什么要這樣做呢? 您需要通過反射調用程序集中的任何代碼(因此,建議MEF可能就是您真正想要的)。

是的,有可能...以某種方式。 看一下Assembly-Class 有了它,您可以從文件中加載程序集,而無需知道確切地加載了什么。

使用Assembly.LoadFrom是擁有零引用的唯一方法,但是您仍然需要共享合同。

添加參考有什么問題?

當有人想在筆記本電腦上工作並且WiFi掉線時,您該怎么辦?

是,

您可以調用Assembly.Load(),然后利用Reflection調用由匯編公開的公共接口(小寫的“接口”,我的意思是方法,字段和屬性)。

但是為了做到這一點,您需要知道調用什么方法。 如果可以確定程序集包含確實符合已知.NET 接口的類,則它將有所幫助。

這個想法是許多工具中“插件”體系結構的基礎,在該工具中,該工具將任何程序集加載到其“插件”目錄中,實例化類,將結果轉換為ISomething,然后通過該接口調用方法。

我還將閱讀Suzanne Cook的.NET CLR注釋。

http://blogs.msdn.com/suzcook/default.aspx

如果此程序集位於共享文件夾中,則您可能會發現.NET安全限制使您無法按預期的方式使用該程序集中的類。

您可能需要考慮將程序集檢入到源代碼存儲庫中,而不是存儲在共享文件夾中。 (我已經看到一個“ / lib”文件夾用於此目的)。 然后,您可以直接引用程序集。

(還有諸如Maven之類的存儲庫解決方案可以更適當地控制它。但是,不幸的是,它們不能與.NET很好地配合使用。)

暫無
暫無

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

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