2009-07-30 89 views
9

我用ASP.Net編寫了一個可用的XML Web服務。現在我需要引用位於特定文件夾中的某些組件,例如c:\NotMyCode
不要想要複製/複製該文件夾中的大量dll到我的bin文件夾中。如何在ASP.net應用程序的bin文件夾外引用程序集?

我試圖保留在Web服務中引用的程序集的CopyLocal=false。最終以組件的FileNotFound異常結束。 當我切換到CopyLocal=true時,引用的DLL被複制到bin文件夾中。

所以我在這裏的問題是: 如何引用不在我的bin文件夾或其下的子文件夾中的程序集?我需要在某處更改某些安全策略文件嗎?我想我不是第一個想做這樣的事情的人..所以我假設有人已經解決了這個問題。

(我試過冒充在IIS ASP.net配置面板管理員用戶,但沒有工作無論是。)

更新:不能在GAC要麼安裝。舉個類比,這個網絡服務給第三方應用程序提供了一個簡化的視圖,例如, StarTeam中。我不能(不應該..不希望......)將該文件夾中的所有二進制文件複製到bin文件夾或將其安裝到GAC中

+0

我有同樣的問題,找不到解決方案!你有沒有設法解決這個問題?我正在使用.NET 3.5。這看起來像http://support.microsoft.com/kb/812832類似的錯誤。 – dtroy 2010-12-20 07:17:20

回答

0

您可以始終將引用的程序集放在GAC,那麼位置無關緊要。您可以通過將組件拖動到GAC(C:\ windows \ assembly)或運行GACUtil.exe來安裝該組件。

本文可能有所幫助。它描述了「Best Practices for Assembly Loading」。

起初我以爲你可以在web.config的runtime/assemblyBinding中使用<probing privatePath="bin\debug"/>元素,但是探測只允許你指定根目錄下的子目錄。

-1

您可以放入GAC並從那裏訪問它。

+0

請閱讀我的問題末尾。 – Gishu 2009-07-30 14:02:43

+0

好的答案?或更好地刪除它? – Kiquenet 2013-02-15 13:12:16

0

我想你也可以在代碼中引用特定的彙編路徑。

AppDomain.CurrentDomain.AppendPrivatePath("C:\\NotMyCode"); 

這樣做在你的Global.asax Application_Start應該做的伎倆。

+0

AppendPrivatePath已過時,根據MSDN:http://msdn.microsoft.com/en-us/library/system.appdomain.appendprivatepath.aspx – 2009-07-30 14:06:53

14

按照MSDN documentation

應用程序的根目錄之外引用的程序集必須具有強名稱和必須被安裝在全局程序集緩存或使用<codeBase>元素指定。

因此,看起來你運氣不好。以下是我想嘗試的:

  1. 在您的應用程序基目錄下創建一個NTFS junction point,該目錄指向包含共享代碼的目錄。這是關鍵的一步。例如,在您的應用程序基礎目錄中,運行linkd SharedCode c:\NotMyCode。這使得<yourappbase>\SharedCode實際上成爲c:\NotMyCode的別名。
  2. 告訴ASP。NET,以此路徑探測組件,使用<probing>元素,參考結點SharedCode。由於這是在你的應用基礎之下,它應該工作。或者,使用AppDomainSetup.PrivateBinPath來設置探測組件的路徑。

我很好奇,想看看,如果這個工程:-)

相關問題