2010-10-15 68 views
2

好吧,我認爲你們大多數人使用wspbuilder來構建wsp解決方案並部署它。所以這是我的問題。問題與代碼訪問安全策略 - 部署第三方DLL到bin

我正在使用第三方dll(Telerik for Asp.Net Ajax - Telerik.Web.UI.dll)獲得豐富體驗的SharePoint解決方案。由於Telerik dll是一個常用程序集,我必須將其部署到Web應用程序的bin文件夾而不是GAC。所以問題來了。

如果dll出現在GAC文件夾中,WSPBuilder會自動將dll部署到gac。要在bin中部署telerik dll,我創建了文件夾80 \ bin並在那裏複製了dll。我試圖再次構建wsp,然後通過創建的manifest.xml。大。將dll的部署目標更改爲WebApplication和wspbuilder很聰明,以創建cas策略本身。

<CodeAccessSecurity> 
     <PolicyItem> 
      <PermissionSet class="NamedPermissionSet" version="1" Description="WSPBuilder generated permissionSet" Name="Telerik.Web.UI4a48967c-0673-4c67-a176-ca7c72c30c4d"> 
       <IPermission class="PrintingPermission" version="1" Level="DefaultPrinting" /> 
       <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="SerializationFormatter" /> 
       <IPermission class="SharePointPermission" version="1" ObjectModel="True" /> 
       <IPermission class="EnvironmentPermission" version="1" Read="TEMP;TMP;USERNAME;OS;COMPUTERNAME" /> 
       <IPermission class="System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Level="Minimal" /> 
       <IPermission class="WebPartPermission" version="1" Connections="True" /> 
       <IPermission class="FileIOPermission" version="1" Read="$AppDir$" Write="$AppDir$" Append="$AppDir$" PathDiscovery="$AppDir$" /> 
       <IPermission class="WebPermission" version="1"> 
        <ConnectAccess> 
         <URI uri="$OriginHost$" /> 
        </ConnectAccess> 
       </IPermission> 
       <IPermission class="IsolatedStorageFilePermission" version="1" Allowed="AssemblyIsolationByUser" UserQuota="9223372036854775807" /> 
       <IPermission class="DnsPermission" version="1" Unrestricted="true" /> 
       <IPermission class="SmtpPermission" version="1" Access="Connect" /> 
       <IPermission class="SqlClientPermission" version="1" Unrestricted="true" /> 
      </PermissionSet> 
      <Assemblies> 
       <Assembly Name="Telerik.Web.UI" Version="2010.2.826.35" PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010069F31F753C891D9F7F9D1CD0B579F61977769A5A48E01247CC2481C8765613854C8DCB5101DD092D5075A7339B4E34D0C9BD417F54972C7554AE480D6B1BB17BE8C1527554644BBD352D9498B174EAFF1090A30E1F7C2C3073669CB3EFC7D9640E82049F5FDA08CA58072C14169091A0BC7092EB6DE9C2A249A3C80F7704E5CF" /> 
      </Assemblies> 
     </PolicyItem> 
    </CodeAccessSecurity> 

但是Wspbuilder並沒有足夠的智能來放置SharePointPermission IPermission類的四個部分名稱。但我瞭解到CAS實際上需要四個部分的名稱。所以我決定使用wspbuilder.exe的-CustomCAS命令行選項來傳遞我的自定義cas策略文件。

這裏是我的自定義策略文件 -

<IPermission class="AspNetHostingPermission" version="1" Level="Minimal" /> 

<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Execute" /> 

<IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" ObjectModel="True" UnsafeSaveOnGet="True" Unrestricted="True" /> 

<IPermission class="System.Security.Permissions.EnivronmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Read="UserName" /> 

所以建立了WSP的中科院部分的manifest.xml閱讀後 -

<CodeAccessSecurity> 
     <PolicyItem> 
      <PermissionSet class="NamedPermissionSet" version="1" Description="WSPBuilder generated permissionSet" Name="Telerik.Web.UIa2cbae96-9c52-459e-80f6-3391af7775ae"> 
       <IPermission class="PrintingPermission" version="1" Level="DefaultPrinting" /> 
       <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="SerializationFormatter" /> 
       <IPermission class="SharePointPermission" version="1" ObjectModel="True" /> 
       <IPermission class="EnvironmentPermission" version="1" Read="TEMP;TMP;USERNAME;OS;COMPUTERNAME" /> 
       <IPermission class="System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Level="Minimal" /> 
       <IPermission class="WebPartPermission" version="1" Connections="True" /> 
       <IPermission class="FileIOPermission" version="1" Read="$AppDir$" Write="$AppDir$" Append="$AppDir$" PathDiscovery="$AppDir$" /> 
       <IPermission class="WebPermission" version="1"> 
        <ConnectAccess> 
         <URI uri="$OriginHost$" /> 
        </ConnectAccess> 
       </IPermission> 
       <IPermission class="IsolatedStorageFilePermission" version="1" Allowed="AssemblyIsolationByUser" UserQuota="9223372036854775807" /> 
       <IPermission class="DnsPermission" version="1" Unrestricted="true" /> 
       <IPermission class="SmtpPermission" version="1" Access="Connect" /> 
       <IPermission class="SqlClientPermission" version="1" Unrestricted="true" /> 
       <IPermission class="AspNetHostingPermission" version="1" Level="Minimal" /> 

       <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Execute" /> 

       <IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" ObjectModel="True" UnsafeSaveOnGet="True" Unrestricted="True" /> 

       <IPermission class="System.Security.Permissions.EnivronmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Read="UserName" /> 
      </PermissionSet> 
      <Assemblies> 
       <Assembly Name="Telerik.Web.UI" Version="2010.2.826.35" PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010069F31F753C891D9F7F9D1CD0B579F61977769A5A48E01247CC2481C8765613854C8DCB5101DD092D5075A7339B4E34D0C9BD417F54972C7554AE480D6B1BB17BE8C1527554644BBD352D9498B174EAFF1090A30E1F7C2C3073669CB3EFC7D9640E82049F5FDA08CA58072C14169091A0BC7092EB6DE9C2A249A3C80F7704E5CF" /> 
      </Assemblies> 
     </PolicyItem> 
    </CodeAccessSecurity> 

後我部署我驗證

的WSP
* the dlls going to bin 
* the trust level changed to custom trust level 
* custom policy file being added to config folder 

但是當我運行該頁面時出現以下錯誤 -

屏幕截圖 -

alt text

錯誤 -

執行權限被拒絕

堆棧跟蹤 -

告訴我,如果你想要的堆棧跟蹤。這有點令人煩惱。

我檢查了我的整個應用程序的DLL的任何程序集引用。但我無法找到一個。有任何想法嗎?

回答

2

我覺得你只是有一個錯字在你的CAS策略:

<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Execute" /> 

應該Flags="Execution""Execute"

+0

嗯。非常舊的帖子。將嘗試檢查你有什麼建議。 – NLV 2011-04-01 03:00:14

+0

接受此作爲答案,因爲我不能回去檢查這個問題在不久的將來。 – NLV 2011-06-22 09:30:29