激活Sharepoint功能时的重复值

时间:2013-08-07 07:05:21

标签: c# sharepoint powershell sharepoint-2010

我在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

任何想法?

1 个答案:

答案 0 :(得分:0)

这看起来像是一个缓存问题,PowerShell会缓存很多SharePoint对象,包括网站模板。它也不会在GAC中重新加载更新的dll。部署wsp后我通常做的就是关闭所有PowerShell窗口,然后重启iis和owstimer。