プログラムで Web.config 設定を追加および削除する
最終更新日: 2010年12月27日
適用対象: SharePoint Foundation 2010
Microsoft SharePoint Foundation で web.config 設定を変更する 1 つの方法は、Microsoft.SharePoint.Administration 名前空間の SPWebConfigModification クラスを使用する方法です。この方法では、エンティティを動的に登録できます。これらの変更は構成データベース内に保持されます。このデータベースでは、変更が一種の仮想 web.config ファイルとして機能し、これが SharePoint Foundation Web アプリケーションの .config ファイル スタックの最終層として効果的に機能します。変更は、SPWebService.ApplyWebConfigModifications メソッドが呼び出されるときに有効になります。
ヒント |
---|
これらの変更は物理 web.config ファイルに書き込まれる場合もありますが、SharePoint Foundation では、物理ファイルへの変更の書き込みには一貫性がありません。したがって、適用されたすべての SPWebConfigModification オブジェクトがファイルに反映されるとは限りません。web.config の変更をトラブルシューティングするときは、SPWebApplication.WebConfigModifications プロパティと SPWebService.WebConfigModifications プロパティ、および物理ファイルを調べてください。 |
注意
ApplyWebConfigModifications を呼び出すコードは、フロント エンド Web サーバーの管理者のユーザー コンテキストで実行される場合にのみ動作します。
注意
web.config ファイルを拡張する 2 番目の方法の詳細については、「[方法] 追加の .config ファイルを作成する」を参照してください。
例: 設定の追加
以下の例は、SPWebConfigModification クラスを使用してカスタム アセンブリを登録する方法を示します。
Dim service As SPWebService = SPWebService.ContentService
Dim myModification As New SPWebConfigModification()
myModification.Path = "configuration/SharePoint/SafeControls"
myModification.Name = "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']"
myModification.Sequence = 0
myModification.Owner = "User Name"
myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode
myModification.Value = "<SafeControl Assembly='MyCustomAssembly' Namespace='MyCustomNamespace' TypeName='*' Safe='True' />"
service.WebConfigModifications.Add(myModification)
'Call Update and ApplyWebConfigModifications to save changes
service.Update()
service.ApplyWebConfigModifications()
SPWebService service = SPWebService.ContentService;
SPWebConfigModification myModification = new SPWebConfigModification();
myModification.Path = "configuration/SharePoint/SafeControls";
myModification.Name = "SafeControl[@Assembly='MyCustomAssembly'][@Namespace='MyCustomNamespace'][@TypeName='*'][@Safe='True']";
myModification.Sequence = 0;
myModification.Owner = "User Name";
myModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
myModification.Value = "<SafeControl Assembly='MyCustomAssembly' Namespace='MyCustomNamespace' TypeName='*' Safe='True' />";
service.WebConfigModifications.Add(myModification);
/*Call Update and ApplyWebConfigModifications to save changes*/
service.Update();
service.ApplyWebConfigModifications();
この例では、Name プロパティにノードを一意に識別する XPath ステートメントが含まれています。これは、ノードの複製がファイルに追加されるのを防止します。
ApplyWebConfigModifications メソッドの呼び出しにより、サーバー ファーム全体にわたって変更を展開するタイマー ジョブをスケジュール設定します。web.config の変更を特定の Web アプリケーションに適用するには、Web アプリケーションの web.config 変更のコレクション (WebConfigModifications) に変更を追加します。たとえば、oWebSite.Site.WebApplication.WebConfigModifications.Add(MyModification) を使用して、特定の Web サイトの親 Web アプリケーションに web.config の変更を追加します。web.config の変更を単一の Web アプリケーションに追加する場合であっても、やはり ApplyWebConfigModifications を呼び出す必要があります。
構成設定の削除
構成設定を削除するコードは、構成設定を "削除" するという変更を除いて同様です。以下の例は構成設定を削除する方法を示しています。コードがまだ ApplyWebConfigModifications を呼び出す必要があることに留意してください。
SPWebConfigModification configModFound = null;
SPWebApplication webApplication = SPWebApplication.Lookup(new Uri("https://localhost/"));
Collection<SPWebConfigModification> modsCollection = webApplication.WebConfigModifications;
// Find the most recent modification of a specified owner
int modsCount1 = modsCollection.Count;
for (int i = modsCount1 - 1; i > -1; i--)
{
if (modsCollection[i].Owner == "User Name")
{
configModFound = modsCollection[i];
}
}
// Remove it and save the change to the configuration database
modsCollection.Remove(configModFound);
webApplication.Update();
// Reapply all the configuration modifications
webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();