2010-07-31 45 views
1

我創建了我的自定義程序集,該程序集中包含一個簡單的HttpModule,我想在我的Sharepojnt 2010站點中使用它。無法將我的自定義DLL部署到Sharepoint站點

我將我的模塊添加到了Sharepoint站點的web.config/system.webServer/modules部分。

然後,我也直接複製我的DLL到bin文件夾,因爲這是如何正常的asp.net應用程序工作。我得到了關於失敗的例外AspNetHostingPermission

我複製了相同的DLL到_app_bin文件夾,它工作。我的模塊確實已經初始化並正在運行。

我然後加入兩種權限到我的模塊類:

[性AspNetHostingPermission(SecurityAction.InheritanceDemand,級別= AspNetHostingPermissionLevel.Minimal)] [性AspNetHostingPermission(SecurityAction.LinkDemand,級別= AspNetHostingPermissionLevel.Minimal)]

也將這兩裝配

[assembly: SecurityPermission(SecurityAction.RequestMinimum, Execution = true)] 
[assembly: AllowPartiallyTrustedCallers] 

,並與我創建了一個關鍵的強烈簽署我的組裝。

然後我將DLL複製回bin但它仍然沒有工作。複製到_app_bin工作。

我該怎麼做才能將我的DLL直接部署到bin文件夾?

+0

它在_app_bin文件夾中工作,爲什麼不把它留在那裏呢? – CodeThug 2010-07-31 19:30:00

+0

,因爲它可能不是如此「可信」,如果它只是運行?我想知道爲什麼? – 2010-07-31 22:26:36

+0

@Tim Larson:我的意思是:因爲它可能不被信任檢查,如果它剛剛運行並且可能實際上並不安全。我寧願以某種方式開發它,以便Sharepoint檢查它並相信它的執行。 – 2010-08-01 08:12:37

回答

1

您遇到的問題是,SharePoint使用代碼訪問安全性(CAS)使真正受過良好教育的管理員可以確保他們不會將環境置於不必要的風險時添加功能性它。

問題是,即使CAS已經在.NET中,自從開始幾乎沒有人在SharePoint之前使用它,所以大多數開發人員不知道如何處理它。

_app_bin中的所有內容都以完全信任的方式運行,這就解釋了爲什麼你的dll在那裏工作。

根據web.config中指定的信任級別,bin中的所有內容都以較少的信任運行(事實上,這也是指定_app_bin具有完全信任的那個,但在所有即用信任水平)。

爲了讓你的dll從bin工作(不改變信任級別到完整的,這是不好的)你需要修改信任級別指向的策略文件,使用正確的xml爲你的dll需要的權利。

添加這些屬性並不能直接幫助你,最初他們實際上只是讓問題變得更糟,因爲現在你的DLL需要權限,即使它可能不會調用任何需要它們的東西。

如果您使用WSPBuilder構建用於部署到SharePoint的WSP包(您正在使用WSP權限),那麼這些屬性可以幫助您,那麼它將查找安全屬性並在manifest.xml中創建相應的條目然後讓SharePoint在部署時將相應的條目添加到策略文件中。

爲了讓你的屬性與WSPBuilder一起工作,我認爲它們必須改爲SecurityAction.Demand。

+0

謝謝Per。這是一個非常好的答案,提示如何獲得CAS的權利。我幾年前曾與CAS合作過(必須從Sharepoint訪問自定義SQL數據庫,並且必須更改信任文件以授予SQL權限)。我只是不知道如何解決這個問題。檢查變化是一個很好的觀點。 – 2010-08-02 09:24:43

相關問題