【问题标题】:Issue with Code Access Security Policy - deploying a third party dll to bin [closed]代码访问安全策略问题 - 将第三方 dll 部署到 bin [关闭]
【发布时间】:2011-04-26 01:41:12
【问题描述】:

好的,我想你们中的大多数人都使用 wspbuilder 来构建 wsp 解决方案并进行部署。所以这是我的问题。

我正在开发一个 SharePoint 解决方案,该解决方案利用第三方 dll(Telerik for Asp.Net Ajax - Telerik.Web.UI.dll)来获得丰富的体验。由于 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 的 cas 部分阅读这个 -

<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

但是当我运行页面时出现以下错误 -

屏幕截图 -

错误 -

执行权限被拒绝

堆栈跟踪 -

如果你想要堆栈跟踪,请告诉我。有点烦人。

我已经检查了我的整个应用程序是否有 dll 的任何程序集引用。但我找不到一个。有什么想法吗?

【问题讨论】:

    标签: c# asp.net sharepoint code-access-security wspbuilder


    【解决方案1】:

    我认为你只是在你的 CAS 政策中有一个错字:

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

    应该是Flags="Execution" 而不是"Execute"

    【讨论】:

    • 嗯。很老的帖子。将尝试检查您的建议。
    • 接受这个作为答案,因为我不能在不久的将来回去检查这个问题。
    猜你喜欢
    • 2014-01-24
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多