1

我正在寻找一种在 SharePoint 中自动部署自定义 CAS 策略的方法。

我想要实现的是以下内容:

由我们的构建服务器(使用密钥)构建和签名的所有程序集都应在“高于正常”信任级别下在 SharePoint 中运行。

现在我可以手动编辑 cas 策略文件以包含如下内容:

        <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="MyPermissionSet" Name="[My Company public key]" Description="Grants all ">
          <IMembershipCondition class="StrongNameMembershipCondition" version="1" PublicKeyBlob="[public key goes here]" />
        </CodeGroup>

这很好用。但是,我们有几个巨大的共享点农场,上面运行着许多应用程序。我想避免手动编辑所有策略文件以包含此 xml 片段。

有没有办法自动化这个?例如,来自一个特征?

亲切的问候, Erwin van der Valk

4

2 回答 2

1

希望您熟悉 .wsp 文件。这是将任何东西部署到服务器场的标准方法。您还可以通过 wsp 文件部署 CAS 策略条目。(也许您只想为您的 cas 策略创建一个 wsp 文件)。wsp 文件与 cab 文件相同,只是重命名。在 wsp 文件中包含 manifest.xml,您可以在其中定义要对 CAS 文件应用的更改。这样做的好处在于它可以通过卸载 WSP 来恢复。我已经看到了几种部署 CAS 策略的不同方法,包括将自定义策略文件作为 wsp 的一部分,并且它像任何其他文件一样被部署。

您应该谷歌 wsp cas policy manifest.xml 以获取更多教程。

希望这可以帮助..

于 2010-05-04T09:43:56.610 回答
1

这就是我为自动部署 WebPart 的 CAS 策略所做的工作:

在我的.wsp文件中,我有一个包含以下内容的Manifest.xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<Solution SolutionId="0C006FE3-919D-4a2a-9CF0-FEA66A0A91E4" xmlns="http://schemas.microsoft.com/sharepoint/" >
    <Assemblies>
        <Assembly Location="MyWebPart.dll" DeploymentTarget="WebApplication">
            <ClassResources>
                <ClassResource Location="MyWebpart_log.config" />
                <ClassResource Location="combo.css" />
                <ClassResource Location="combo.js" />
                <ClassResource Location="img/arrow.png" />
                <ClassResource Location="img/coordination.gif" />
                <ClassResource Location="img/dt-arrow-dn.png" />
                <ClassResource Location="img/dt-arrow-up.png" />
                <ClassResource Location="img/loading.gif" />
                <ClassResource Location="img/menu-button-arrow.png" />
                <ClassResource Location="img/spinner.gif" />
                <ClassResource Location="img/split-button-arrow.png" />
                <ClassResource Location="img/sprite.png" />
            </ClassResources>
            <SafeControls>
                <SafeControl Assembly="MyWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=017e953639e07a31"
                             Namespace="MyWebPart" TypeName="*" Safe="True" />
            </SafeControls>
        </Assembly>
        <Assembly Location="log4net.dll" DeploymentTarget="WebApplication">
            <SafeControls>
                <SafeControl Assembly="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821"
                             Namespace="MyWebPart" TypeName="*" Safe="True" />
            </SafeControls>
        </Assembly>
    </Assemblies>
    <CodeAccessSecurity>
        <PolicyItem>
            <PermissionSet class="NamedPermissionSet" version="1" Name="MyWebPartPermissionSet"
                           Description="Permission set for My Web Part">
                <IPermission class="AspNetHostingPermission" version="1" Level="Medium" />
                <IPermission class="System.Net.DnsPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                             version="1" Unrestricted="true" />
                <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                      version="1" Read="$AppDir$" Write="$AppDir$" Append="$AppDir$" PathDiscovery="$AppDir$" />
                <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                    version="1" 
                    Flags="Execution" />
                <IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" version="1" ObjectModel="True" />
                <IPermission class="Microsoft.SharePoint.Security.WebPartPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" 
                             version="1" Connections="True" />
                <IPermission class="System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                             version="1">
                    <ConnectAccess>
                        <URI uri=".*"/>
                    </ConnectAccess>
                </IPermission>
            </PermissionSet>
            <Assemblies>
                <Assembly Name="MyWebPart" />
            </Assemblies>
        </PolicyItem>
        <PolicyItem>
            <PermissionSet class="NamedPermissionSet" version="1" Name="Log4NetForMyWebPart"
                           Description="Permission set for Log4Net (logging library used by the My Web Part">
                <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Execution" />
                <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
                        version="1" Read="$AppDir$" Write="$AppDir$" Append="$AppDir$" PathDiscovery="$AppDir$" />
            </PermissionSet>
            <Assemblies>
                <Assembly Name="log4net" />
            </Assemblies>
        </PolicyItem>
    </CodeAccessSecurity>
</Solution>

您将不得不深入研究您需要的权限的 MS 文档,因为我花了一段时间才弄清楚我需要哪些权限。

.wsp文件是使用以下命令创建的:

cabarc -r -p N ..\MyWebPart-1.0.0.wsp *

(我从微软网站下载了cabarc,但我不记得具体在哪里)

要将 Web 部件解决方案部署到 SharePoint 中,我使用以下命令:

cd C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\bin

stsadm.exe -o addsolution -filename MyWebPart-1.0.0.wsp

stsadm.exe -o deploysolution -name MyWebPart-1.0.0.wsp -immediate -allcontenturls -allowCasPolicies

stsadm.exe -o execadmsvcjobs

allowCasPolicies 参数是必需的,因为解决方案包含 CAS 策略。没有它,它们将不会被添加到 SharePoint 的 web.config 文件中。

于 2010-05-04T09:59:15.903 回答