2013-08-07 98 views
1

我在Sharepoint 2010中有一項功能,可以將SPWebConfigModification添加到SharePoint站點。它增加了一個鍵appSettings部分激活Sharepoint功能時的循環值

功能激活代碼如下:

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)在特徵代碼

5)部署與含有新值特徵WSP WebConfigModification的編輯值。成功

6)檢查WebConfig文件以獲取正確的appsetting條目。 appSettings條目包含新值。

7)在中央管理中,取消激活功能。成功

8)激活功能。成功

9)檢查WebConfig文件以獲取正確的appsetting條目。 appSettings條目包含OLD值。

爲什麼舊值持續存在?

當使用PowerShell的我發現,當下面的代碼是在PowerShell中運行舊值出現在集合中檢查WebConfigModifications:

Add-PSSnapin Microsoft.SharePoint.PowerShell 
$w = Get-SPWebApplication -Identity http://SiteUrl 
$w.WebConfigModifications 

什麼想法?

回答

0

這看起來像是一個緩存問題,PowerShell緩存了很多SharePoint對象,包括網站模板。它也不會在GAC中重新載入更新後的dll。我通常在部署wsp後執行的操作是關閉所有PowerShell窗口,然後重新啓動iis和owstimer。

+0

上面的powershell代碼塊重新填充$ w對象,並顯示調用Get-SPWebApplication時Web應用程序的狀態。 我在部署步驟和功能激活之間運行該代碼塊,它返回所期望的。 對不起,男人,意思是說,我使用PowerShell確認什麼是在當時的內容數據庫 – Xariex