Sharepoint 2007 - не могу найти мои модификации для web.config в SpWebApplication.WebConfigModifications - PullRequest
2 голосов
/ 28 марта 2010

Я не могу найти изменения, которые я сделал в web.config в моем событии FeatureRecievers Activated. Я пытаюсь получить изменения из коллекции SpWebApplication.WebConfigModifications в событии деактивации, но это всегда пусто .... И самое странное, что мои изменения все еще возвращаются после деактивации функции ...

У меня вопрос, не должен ли я просмотреть все изменения, внесенные в файлы web.config при доступе к коллекции SpWebApplication.WebConfigModifications в событии Deactivating? Как мне явно удалить свои изменения?


 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;</p>

    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;
}

}

Спасибо за ваше время. / Hans

1 Ответ

1 голос
/ 29 марта 2010

Наконец, сегодня я выяснил, что не так с моим кодом (поэтому коллекция WebConfigModifications была пустой, когда я запросил ее в событии deactivate), кажется, что вы должны применить изменения не так, как я.

Мой оригинальный подход к применению изменений заключался в следующем коде:

Активировать событие

<code>webApplication.Farm.Services.GetValue().ApplyWebConfigModifications();
webApplication.WebService.Update();

«Правильный» способ сделать это так:

<code>SPWebService.ContentService.ApplyWebConfigModifications();
webApplication.Update();

Хотя я все еще в растерянности, почему мой оригинальный код не работал .. может ли кто-нибудь с большим знанием объекта конфигурации в Sharepoint просветить меня?

...