2014-04-15 21 views
0

我已經添加了.NET dll庫「itextsharp」,我正在使用我的C#代碼。 DLL可以在以下目錄中存在:在.NET中從不同的位置添加相同的dll參考

C:\ProgramData\<Application Name>\ or 
C:\Users\<Username>\AppData\ 
C:\Windows\System32\ or 
C:\Windows\ 

我想知道怎麼寫,檢查如果DLL出現在上述任何位置的代碼,然後使用它。像:

string sPath = ""; 
if(File.Exist(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\<Application Name>"\\itextsharp.dll")) 
    sPath = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\<Application Name>"\\itextsharp.dll"); 
else if(File.Exist(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\<Application Name>"\\itextsharp.dll")) 
    sPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\<Application Name>"\\itextsharp.dll"); 

....等等.....

,然後如何使用sPath變量訪問庫和其命名空間和類。

我想這樣,因爲該文件並不總是在特定的文件夾中,我不想將所有代碼相關的文件保存在主程序文件夾中:"C:\Program Files\<Application Name>\"如果文件已經存在於上述任何位置,則寧願首先使用它。所以,如果我使用「添加引用」添加.NET庫,那麼它是一個固定的路徑嗎?我需要先找到正確的路徑,然後指示代碼使用它並訪問它的命名空間和類。

我的第二個問題是,如果我使用「添加引用」從位置添加.NET DLL,那麼在客戶端計算機上部署路徑時應該完全相同?例如,如果我的Windows驅動器是C:並且我使用路徑"C:\Users\<Username>\AppData\itextsharp.dll",但是如果客戶端將Windows安裝在D:驅動器中,那麼代碼將從C驅動器還是D驅動器訪問路徑?以及如何以編程方式更改路徑?

+2

那麼,你可以使用相對路徑在GAC(Global Assemblies Cache)或引用者中註冊一個dll。例如,您可以在項目中創建一個名爲「Libs」的文件夾,在該文件夾中可以存儲所有必需的外部庫。當您執行部署時,這些庫將始終與您的項目一起部署(在bin文件夾中,Web和客戶端應用程序之間沒有差異)。 –

+1

也許這將有助於:http://stackoverflow.com/questions/15666618/csproj-multiple-hint-paths-for-an-assembly –

+1

你不是隻是想解決融合問題? http://stackoverflow.com/questions/9961162/what-is-fusion-in-net-assembly – rene

回答

1

如果我使用「添加引用」添加.NET庫,那麼它是一個固定的路徑嗎? - 在項目中使用程序集/二進制文件時沒有涉及的路徑。

這裏是你可以按照實施步驟,

  1. 在項目的根文件夾,應該有 二進制文件/依賴文件夾,在這裏您可以存儲路徑少(這是可以不安裝在您的工作臺或第三方,如 iTextSharp,telerik)組件。
  2. 您只會從該項目的文件夾中引用所需的程序集。

  3. 當您部署/發佈,請確保您設置複製本地選項設置爲。從中選擇程序集參考選項卡,然後導航到屬性 - 您正在告訴Visual Studio將所有這些引用的程序集複製到bin已發佈/已部署目錄的目錄中。

如果我從一個位置的.NET的DLL使用「添加引用」,當它被部署客戶端的機器上,那麼應該路徑是完全相同補充的嗎? - 上述做法將消除這種可能性。

無論項目是安裝還是web,它的發佈副本都必須包含所有依賴關係,因此我們稱之爲包。