SharePoint の Web フロントエンド サーバーに自前で開発した DLL を組み入れる際にはGAC に放り込め、というのがいろいろなブログで紹介されている一般的なやり方です。
では、ローカルの bin フォルダに放り込むとどうなるかというと、これだけでは動作しません。
これは、SharePoint Service のコード アクセス セキュリティの為です。
SharePoint のコードアクセスセキュリティでは、
GAC
_layouts フォルダのルート
_vti_bin フォルダのルート
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files (動的生成ファイル用フォルダ)
のアセンブリとページに対して信頼していますが、bin フォルダのアセンブリは一部のみ信頼しています。
この設定は、二つのセキュリティ ポリシー ファイル Windows SharePoint Services Minimal (WSS_Minimal) と Windows SharePoint Services Medium (WSS_Medium) で定義されています。
自分で持ち込んだ DLL をローカルの bin またはユーザー作成の任意のフォルダ (保守のため) に放り込む際には、下記のようにして DLL を信頼設定します。
解決策
特定のアセンブリをFullTrustに設定する
(1) セキュリティ ポリシー ファイルを作成し、トラストを設定する
※ ここでは FullTrust にしています
[AppFolder]/wss_honneamisetrust.config を作成(wss_minimaltrust.config をコピー)
コードグループ追加
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Honneamise_Strong_Name"
Description="This code group grants code signed with the Microsoft strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="0024000004800000940000000602000000240000525341310004000001000100ABC9688F4AB27544EBBFBCB17135BB2DD7506C6331B9D5955379D6AC86B6FBF1BE7555F4E0BBDBF06B51AD779A8F78EF74C59E2A23B749A02FCDE50972225210F42D06204593265F3AFD60516478FAB80754D752411E14B66107939AFA5C67C789810B0362FC734E3F4B7DD1F7EFB649403C1C994B489BCC9894B5FD60C835DA"
/>
</CodeGroup>
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="HonneamiseSharePoint_Strong_Name"
Description="This code group grants code signed with the Microsoft strong name full trust. ">
<IMembershipCondition
class="StrongNameMembershipCondition"
version="1"
PublicKeyBlob="002400000480000094000000060200000024000052534131000400000100010023E4E23C1C8ABFCD8B2A95D5B4A3EDA7DB08B441F0B5D2535AA5D3ED3A0F1732318387BB50DF39FAFFF37766C211AD81C5C93CD259E478CC40271E2CD54CCC4A246274EB73CE2709AB1334180FC522A76A3E54065436393E867A2944B8F3B5A9A753DC0F79155C35F4CA485EC64A4B38B96D4730154474012B30CDC97945D4CC"
/>
</CodeGroup>
<!-- カスタムフォルダの場合 -->
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="SPRestricted">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="$AppDirUrl$/_custom_bin/*"
/>
(2) web.configを編集する
<system.web>
<securityPolicy>
<trustLevel name="WSS_Honneamise" policyFile="wss_honneamisetrust.config"/>
...
<trust level="WSS_Honneamise" originUrl=""/>
セキュリティ ポリシーを再適用するには、IIS をリセットする必要があります。
参考情報
信頼レベルとアクセス許可は下記の通りです
アクセス許可 | 完全 (Full) | WSS_Medium | WSS_Minimal |
AspNetHostingPermission | 完全 (Full) | 中 (Medium) | 最小 (Minimal) |
環境 | 無制限、または、すべてのサブ アクセス許可の付与 | 読み取り : TEMP、TMP、OS、USERNAME、COMPUTERNAME | |
FileIO | 無制限、または、すべてのサブ アクセス許可の付与 | 読み取り、書き込み、追加、PathDiscovery : アプリケーション ディレクトリ | |
IsolatedStorage | 無制限、または、すべてのサブ アクセス許可の付与 | AssemblyIsolationByUser、UserQuota 指定 | |
リフレクション | 無制限、または、すべてのサブ アクセス許可の付与 | ||
レジストリ | 無制限、または、すべてのサブ アクセス許可の付与 | ||
セキュリティ | 無制限、または、すべてのサブ アクセス許可の付与 | 実行、アサーション、ControlPrincipal、ControlThread、RemotingConfiguration | 実行 |
ソケット | 無制限、または、すべてのサブ アクセス許可の付与 | ||
WebPermission | 無制限、または、すべてのサブ アクセス許可の付与 | 元のホストへの接続 (構成されている場合) | |
DNS | 無制限、または、すべてのサブ アクセス許可の付与 | 無制限、または、すべてのサブ アクセス許可の付与 | |
印刷 | 無制限、または、すべてのサブ アクセス許可の付与 | 既定の印刷 | |
OleDBPermission | 無制限、または、すべてのサブ アクセス許可の付与 | ||
SqlClientPermission | 無制限、または、すべてのサブ アクセス許可の付与 | 無制限、または、すべてのサブ アクセス許可の付与 | |
EventLog | 無制限、または、すべてのサブ アクセス許可の付与 | ||
メッセージ キュー | 無制限、または、すべてのサブ アクセス許可の付与 | ||
サービス コントローラ | 無制限、または、すべてのサブ アクセス許可の付与 | ||
パフォーマンス カウンタ | 無制限、または、すべてのサブ アクセス許可の付与 | ||
ディレクトリ サービス | 無制限、または、すべてのサブ アクセス許可の付与 | ||
SharePointPermission | 無制限、または、すべてのサブ アクセス許可の付与 | SharePointPermission.ObjectModel | |
WebPartPermission | 無制限、または、すべてのサブ アクセス許可の付与 | WebPartPermission.Connections | WebPartPermission.Connections |