Share via


プログラムで 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();

関連項目

タスク

[方法] 追加の .config ファイルを作成する

概念

Web.config ファイルを使用して作業する