2012-02-20 65 views
-1

我使用Visual Studio製作C#程序。我有一個第三方的Dll,我正在加載。它可以工作,但我希望它位於編譯目錄的子目錄中。 (Release \ lib \而不是Release)。我可以使用exe.config文件來完成此操作,但我不希望用戶能夠更改程序查找Dll的位置。那麼,如何在不使用exe.config的情況下在子目錄中引用Dll?Visual Studio - 在編譯文件夾外加載參考文件

+0

將其複製到文件夾中。刪除當前引用,然後轉到參考 - >添加並導航到.dll位於的位置..這是一個問題..當你部署應用程序..你打算在目標計算機上創建一個文件夾,基於你將它放在本地..還是你要設置copy local = true ..?你有沒有想過使用GAC,如果你正在移植到目標機器? – MethodMan 2012-02-20 19:08:47

+0

我已經嘗試過......它將其複製到輸出目錄,或者,如果我將其關閉,則會在運行時發出錯誤。在目標機器上,它將具有帶有exe的bin文件夾,然後是帶有dll的lib文件夾。還有一些其他的東西,但現在並不重要。另外,我看過其他人發表的帖子,其中有人說你可以使用GAC,但這是一個非常糟糕的主意......所以如果沒有這個可能,那會更好。 – Aidan 2012-02-20 19:15:32

回答

0

我認爲您需要AppDomainSetup.PrivateBinPath屬性設置爲您的域。 在此屬性中指定文件夾路徑(如果多於一個用「;」分隔)您的引用程序集所在的位置。通過這種方式,您可以對程序集進行簽名,以查找指定的目錄以獲取所需的引用。

請注意,此屬性僅適用於子目錄o bin路徑的目錄,但看起來確實如此。

編輯

例子:

AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "path1;path2;..."; 

好運。

+0

好吧,這似乎是我需要的,但我在哪裏放?對不起,我對這種東西不太好。在Main()函數頂部的Program.cs中,我將AppDomainSetup設置爲appdomainsetup = new AppDomainSetup(); \t \t \t appdomainsetup.PrivateBinPath =「\\ lib \\」;但我如何使用該變量? – Aidan 2012-02-20 19:27:13

+0

@Aidan:結帳我編輯的評論 – Tigran 2012-02-20 19:39:01

+0

這是行不通的:/。我嘗試打印出改變後改變的值,沒有任何結果。所以,這意味着它不會更新該變量。我認爲你需要做的是創建一個新的域並設置它。我想弄清楚現在怎麼做...... – Aidan 2012-02-20 19:46:50

0

在開始加載dll之前,指定PrivateBinPath很重要。

static class Program 
{ 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = "path"; 
     Application.Run(new Form1()); 
    } 
} 

如果在應用程序文件夾一個dll需要在我們指定的文件夾PrivateBinPath另一個DLL,它不會工作。所有dll必須在同一個文件夾中...

相關問題