そのため、WebConfigModifications コレクションを使用して web.config を更新する Web アプリケーション機能を展開しようとしています。あなたが遭遇したすべての問題を含め、これを行うことに関する多くの情報があるので、コードには非常に自信がありますが、何を試しても構成要素が Web 構成に追加されません。これは、開発用の単一サーバー環境では正常に機能しますが、ファームでは更新されません。
エラーなし、ログ情報なし、イベントメッセージなし....更新されない理由を示すものは何もありません:
SPWebConfigModification appSettingModification = new SPWebConfigModification();
appSettingModification.Name = "add[@key=\"Key\"][@value=\"Value\"]";
appSettingModification.Path = "構成/appSettings";
appSettingModification.Owner = "所有者";
appSettingModification.Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode;
appSettingModification.Value = __appSettingResource;
if (removeModification)
{
app.WebConfigModifications.Remove(appSettingModification);
}
else
{
app.WebConfigModifications.Add(appSettingModification);
}
app.Update();
app.Farm.Services.GetValue<SPWebService>()。
==============================
編集
ApplyWebModifications メソッドを反映するという drax の提案に基づいて、これに追加したいと思いました。このメソッドは、Microsoft.SharePoint アセンブリの Microsoft.SharePoint.Administration 名前空間にある SPWebService にあります。
この方法を使用する際の問題の 1 つは、変更が実際に適用されていない場合でも、ファーム内のすべての web.config ファイルが更新されることです。これにより、Web 構成を更新するつもりがない場合でも、アプリ プールがリサイクルされます。反射は、なぜこれが起こっているのかを示しており、非常に迷惑です。
メソッド内には短い foreach ループがあります。
foreach (this.WebApplications 内の SPWebApplication アプリケーション)
{
application.ApplyWebConfigModifications();
}
各 Web アプリケーションをループし、Web アプリケーション オブジェクトでINTERNALの ApplyWebConfigModifications メソッドを呼び出しています。彼らがこのメソッドを公開しただけであれば、更新の影響を受けない Web アプリケーションでのアプリ プールのリサイクルに影響を与えることなく、メソッドを個別に呼び出すことができます。言ってるだけ'