1

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

有任何想法吗?

4

1 回答 1

0

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

于 2013-08-07T10:04:58.680 回答