我在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条目包含旧值。
为什么旧值会持续存在?
使用powershell检查WebConfigModifications时,我发现在Powershell中运行以下代码时,旧值存在于集合中:
Add-PSSnapin Microsoft.SharePoint.PowerShell
$w = Get-SPWebApplication -Identity http://SiteUrl
$w.WebConfigModifications
任何想法?
答案 0 :(得分:0)
这看起来像是一个缓存问题,PowerShell会缓存很多SharePoint对象,包括网站模板。它也不会在GAC中重新加载更新的dll。部署wsp后我通常做的就是关闭所有PowerShell窗口,然后重启iis和owstimer。