簡體   English   中英

如何使.dll文件與使用它們的.exe文件分開?

[英]How to keep .dll files apart from .exe file that uses them?

通常,您必須將應用程序使用的所有.dll文件放在與.exe文件相同的位置。 我想將這些庫保存在其他專用文件夾中,僅向我的應用程序顯示在哪里查找它們(通過app.config中的某個路徑或類似的內容)。 我該怎么做呢?

您可以使用app.config中的<probing>元素來指定在哪里查找依賴項。 我相信這將必須是exe位置下的目錄,而不是磁盤上的任意位置。

有關如何將其掛在一起的更多信息,請參見“通過代碼庫或探測定位程序集”

還要考慮GAC -它的目的是保持組件;)

其實還有其他方法最適合我的需求。 使用反射(assebly.loadfrom)是不愉快的,並且需要在我的代碼中進行很多更改。 但是您可以向appDomain.AssemblyResolve事件添加一個處理程序,並在未找到請求的程序集的情況下顯示其位置。

static void Main()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            return Assembly.LoadFrom("C:\\TestAssembly.dll");
        }

您可以使用Reflection從指定的路徑加載dll,然后訪問其中的所有類和方法,盡管這會很麻煩! 您還將失去智能感知的好處,但是有可能,請參閱:

http://www.codeproject.com/KB/cs/csharpreflection.aspx

我建議您使用GAC或通過EXE分發所有相關的DLL。 否則,您可能會遇到難以理解的版本控制錯誤或應用程序突然停止運行以及其他問題。

另外,請不要忘記,如果共享代碼位於網絡共享上,則可能仍然需要修改每台計算機的安全設置。

問候

暫無
暫無

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

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