Sharepoint 2007 - 无法在SpWebApplication.WebConfigModifications中找到我对web.config的修改

时间:2010-03-28 17:34:00

标签: sharepoint-2007 web-config

我似乎无法在FeatureRecievers Activated事件中找到我对web.config所做的修改。我尝试在停用事件中从SpWebApplication.WebConfigModifications集合中获取修改,但这始终是空的....最奇怪的是,在停用该功能后,我的更改仍然会被恢复...

我的问题是,在Deactivating事件中访问SpWebApplication.WebConfigModifications集合时,我是否应该无法查看对web.config文件所做的所有更改?我应该如何明确删除我的更改?


 public class FeatureReciever : SPFeatureReceiver
{
    private const string FEATURE_NAME = "HelloWorld";
    private class Modification
    {
        public string Name;
        public string XPath; 
        public string Value; 
        public SPWebConfigModification.SPWebConfigModificationType ModificationType;
        public bool createOnly;

public Modification(string name, string xPath, string value, SPWebConfigModification.SPWebConfigModificationType modificationType, bool createOnly) { Name = name; XPath = xPath; Value = value; ModificationType = modificationType; this.createOnly = createOnly; } } private Modification[] modifications = { new Modification("connectionStrings", "configuration", "<connectionStrings/>", SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode, true), new Modification("add[@name='ConnectionString'][@connectionString='Data Source=serverName;Initial Catalog=DBName;User Id=UserId;Password=Pass']", "configuration/connectionStrings", "<add name='ConnectionString' connectionString='Data Source=serverName;Initial Catalog=DBName;User Id=UserId;Password=Pass'/>", SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode, false) }; public override void FeatureActivated(SPFeatureReceiverProperties properties) { SPSite siteCollection = (properties.Feature.Parent as SPWeb).Site as SPSite; SPWebApplication webApplication = siteCollection.WebApplication; siteCollection.RootWeb.Title = "Set from activating code at " + DateTime.Now.ToString(); foreach (Modification entry in modifications) { SPWebConfigModification webConfigModification = CreateModification(entry); webApplication.WebConfigModifications.Add(webConfigModification); } webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications(); webApplication.WebService.Update(); } public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { SPSite siteCollection = (properties.Feature.Parent as SPWeb).Site as SPSite; SPWebApplication webApplication = siteCollection.WebApplication; siteCollection.RootWeb.Title = "Set from deactivating code at " + DateTime.Now.ToString(); IList<SPWebConfigModification> modifications = webApplication.WebConfigModifications; foreach (SPWebConfigModification modification in modifications) { if (modification.Owner == FEATURE_NAME) { webApplication.WebConfigModifications.Remove(modification); } } webApplication.Farm.Services.GetValue<SPWebService>().ApplyWebConfigModifications(); webApplication.WebService.Update(); } public override void FeatureInstalled(SPFeatureReceiverProperties properties) { } public override void FeatureUninstalling(SPFeatureReceiverProperties properties) { } private SPWebConfigModification CreateModification(Modification entry) { SPWebConfigModification spWebConfigModification = new SPWebConfigModification() { Name = entry.Name, Path = entry.XPath, Owner = FEATURE_NAME, Sequence = 0, Type = entry.ModificationType, Value = entry.Value }; return spWebConfigModification; }

}

感谢您的时间。 /汉斯

1 个答案:

答案 0 :(得分:1)

最后今天我弄清楚我的代码出了什么问题(这就是为什么当我在停用事件中查询它时WebConfigModifications集合为空)似乎你必须以不同于我的方式应用更改。

我应用更改的原始方法涉及以下代码:

激活事件

webApplication.Farm.Services.GetValue().ApplyWebConfigModifications();
webApplication.WebService.Update();

“正确”的做法是这样的:

SPWebService.ContentService.ApplyWebConfigModifications();
webApplication.Update();

虽然我仍然不知道为什么我的原始代码不能正常工作..在Sharepoint中有更多知识配置对象的人可以启发我吗?