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