我在 Sharepoint 2010 中有一项功能,可将 SPWebConfigModification 添加到 sharepoint 站点。它向 appSettings 部分添加了一个键
功能激活码如下:
private static void ActivateWebConfigModifications(SPWebApplication webApplication)
{
webApplication.WebConfigModifications.Add(GetConfigMod());
webApplication.Update();
webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
}
功能停用代码如下:
private static void DeactivateWebConfigModifications(SPWebApplication webApplication)
{
Collection<SPWebConfigModification> modifications = webApplication.WebConfigModifications;
foreach (SPWebConfigModification mod in modifications)
{
if (mod.Owner == GetConfigMod().Owner)
{
modifications.Remove(mod);
}
}
webApplication.Update();
webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications();
}
问题和事件的顺序。
1) 部署具有功能的 wsp 解决方案。成功
2) 检查 WebConfig 文件以获取正确的 appsetting 条目。appSettings 条目正确
3) 收回并移除 wsp 解决方案。撤回和删除成功
4) 编辑特性代码中 WebConfigModification 的值
5) 使用包含新值的功能部署 wsp。成功
6) 检查 WebConfig 文件以获取正确的 appsetting 条目。appSettings 条目包含新值。
7)在中央管理,停用功能。成功
8) 激活功能。成功
9) 检查 WebConfig 文件以获取正确的 appsetting 条目。appSettings 条目包含 OLD 值。
为什么旧值仍然存在?
使用 powershell 检查 WebConfigModifications 时,我发现在 Powershell 中运行以下代码时集合中存在旧值:
Add-PSSnapin Microsoft.SharePoint.PowerShell
$w = Get-SPWebApplication -Identity http://SiteUrl
$w.WebConfigModifications
有任何想法吗?