コードアクセスポリシーを使用してWSPを生成するためのベストプラクティス
-
10-12-2019 - |
質問
SharePoint 2007とVisual Studio 2008を使用しています。既存のソリューションにカスタムコードをいくつか変更しました。これで開発が終了し、WSPファイルを生成しようとします。1つの問題だけがあります。GACにはなく、CASポリシーを使用してWSPファイルを生成する必要があります。このソリューションを作成した人はこのシナリオで行っていました:
1)ビルド出力パスを "80 \ bin"に変更しました。
2)リリースビルド
3)WSP Builder でWSPを生成する
4)生成されたWSPファイルの拡張子を.cab に変更します。
5)CABファイルを抽出する
6)manifest.xml を見つけて編集する
7)要素を変更する:
<CodeAccessSecurity>
<PolicyItem>
<PermissionSet class="NamedPermissionSet" version="1" Description="WSPBuilder generated permissionSet" Name="MyCompany.MyCustomer.SharePoint.MySolutionNamed20708d8-8d7f-448d-ae19-52e93e729cc5">
<IPermission class="AspNetHostingPermission" version="1" Level="Minimal" />
<IPermission class="SecurityPermission" version="1" Flags="Assertion, Execution, ControlThread, ControlPrincipal" />
<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"/>
</PermissionSet>
<Assemblies>
<Assembly Name="MyCompany.MyCustomer.SharePoint.MySolutionName" Version="1.0.0.0" PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010061501CE5D2B707D9EE7AFE461FC262A07CD83D417AE9AC31B142586832A038C385DF5A19C4974B39E0EE5F166B4F9C1707987030522B7B5808D910E6C749BAC97EE79976273BA06516AD5D7DB9DD7C53D8A47B038479E627BB0B2AAE299D6F0C392AF7C00CE42D6A3FB25F391AAC36C5217AE98FBBD18AFE3736905FFF0058A4" />
</Assemblies>
</PolicyItem>
</CodeAccessSecurity>
.
8)ファイルを保存
9)CABファイルを作成する
10)WSPファイルを作成する
誰かがこれをするための厄介な解決策です。wspbuilderがコマンドラインで可能になるはずです。誰かがこれを行う方法を教えてもらえますか?
解決
あなたのパブリッククラスファイルの真上に追加してください!
[SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Impersonate = true)]
[SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, ObjectModel = true)]
.
その後、マニフェストファイル内のXMLファイルをビルドするように、WSPBuilderにRESTをRESTにします。
編集
需要メソッドへの呼び出しに続くコードが実行されます コールスタック内のすべての発信者に権限が付与されている場合にのみ SharePointオブジェクトモデルにアクセスするには。このセキュリティデマンドであることに注意してください 需要への呼び出し前に来るコードに影響を与えない 方法。あなたが使うことになっていた場合、状況は異なるでしょう MyMethodに注釈を付けるための宣言的セキュリティ構文 SharePointPermissionAttributeメタデータ属性:
.[SharePointPermission(SecurityAction.Demand, ObjectModel=true, Unrestricted=true)] public void MyMethod() { ... SPWeb site = SPContext.Current.Web; ... }
あなたの場合、そのCreate Child Controlsメソッドを含むメインクラスの例として、
.using System; using System.ComponentModel; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using Microsoft.SharePoint; using Microsoft.SharePoint.WebControls; namespace test { [SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, Impersonate = true)] [SharePointPermissionAttribute(System.Security.Permissions.SecurityAction.Demand, ObjectModel = true)] [ToolboxItemAttribute(false)] public class VisualWebPart1 : WebPart { // Visual Studio might automatically update this path when you change the Visual Web Part project item. private const string _ascxPath = @"~/_CONTROLTEMPLATES/test/VisualWebPart1UserControl.ascx"; protected override void CreateChildControls() { Control control = Page.LoadControl(_ascxPath); Controls.Add(control); } } }
また、ポリシーに見えたいものにもよりますか? IVとしてコメントブロック内に注意してください。プロジェクト内のすべてのクラスではなく、ポリシーを必要とする主要クラスだけを理解してください。
http://msdn.microsoft.com / en-us/library/gg427711(v=オフィス。12 ).aspx