2010-01-12 44 views
3

我有一個包含名爲「Lib」的文件夾的類庫名稱「VirusScanManager」。該文件夾包含一個命令行掃描程序exe和支持文件。所有這些文件的「Build Action」設置爲「Content」和「Copy to Output Directory」設置爲「始終複製」。如何在網站中運行時訪問類庫中的內容

庫我得到使用以下行的路徑,裏面的文件夾:

string virusCheckFolder 
= Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Lib"); 

我有一個測試類庫一起VirusScanManager參考。當測試運行virusCheckFolder設置爲

C:\...\Projects\WebSiteMobileAdmin\Tests\bin\Debug\Lib

這工作,因爲該文件被複制那裏。

我還有一個BusinessLogicLayer類庫,它引用了VirusScanManager。當我運行我的網站virusCheckFolder設置爲

C:\...\WebSites\WebSiteMobileAdmin\Lib

這不起作用,因爲Beaner的建議文件實際拷貝到

C:\...\Projects\WebSiteMobileAdmin\BusinessLogic\bin\Debug\Lib

然後我試圖反思:

string pathToDLL = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Replace("file:///", "")); 
string virusCheckFolder = Path.Combine(pathToDLL, "Lib"); 

這給我

C:\...\WebSites\WebSiteMobileAdmin\Bin\Lib

但是這個文件夾不存在。 我有一個對WebsiteMobileAdmin中的BusinessLogicLayer的引用,以及對BusinessLogicLayer中的VirusScanManager的引用。看起來,當我執行構建時,dll會在BusinessLogicLayer \ bin \ debug和WebsiteMobileAdmin \ bin中創建,但lib文件夾僅複製到BusinessLogicLayer \ bin \ debug。

那麼,有沒有辦法讓內部庫的路徑適用於這兩種情況?

回答

3

嘗試使用反射來獲取組件的路徑,而不管它在哪裏。

string strPath = System.IO.Path.GetDirectoryName(
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 
+0

請參閱我的編輯。我試過這個,但似乎有2個dll副本,它使用的版本沒有與它的Lib – Colin

+0

我很抱歉,因爲我在理解你在做什麼時有些困難,但是如果我是正確讀取您的Tests類位於WebSiteMobileAdmin命名空間中。它應該位於WebSiteMobileAdmin \ BusinessLogic命名空間中嗎? – jac

+0

有3個名爲BusinessLogicLayer,Tests和VirusScanManager的類庫,每個庫都有自己的名稱空間。 WebSiteMobileAdmin是一個可以引用BusinessLogicLayer的網站。 BusinessLogicLayer具有對VirusScanManager的引用。 VirusScanManager使用一個exe文件,並需要在一個文件夾中創建一個文件。所以我在VirusScanManager項目中創建了一個子文件夾。我想從VirusScanManager的內部獲取文件夾的路徑,以便我可以重新使用類庫,而無需在調用代碼中創建文件夾並將路徑傳入。這有幫助嗎? – Colin

相關問題