2013-04-15 3 views
1

Я использую log4net с точкой доли 2010. У меня есть функция, которая автоматически добавляет log4net конфигурацию, когда мой soultion развернут в режиме ошибки, используя следующий кодSPWebConfigModification - Особенность перезаписи друг друг модификации

SPWebService service = SPWebService.ContentService; 

      service.WebConfigModifications.Clear(); 
    //ADD log4Net config section 
      service.WebConfigModifications.Add(new SPWebConfigModification() 
      { 
       Path = "configuration/configSections", 
       Name = "section[@name='log4net']", 
       Sequence = 0, 
       Owner = CREATE_NAME, 
       Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode, 
       Value = string.Format(@"<section name='log4net' type='log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version={0}, Culture=neutral, PublicKeyToken={1}' />", LOG4NET_VERSION, LOG4NET_PUBLIC_KEY_TOKEN) 
      }); 


      string log4netConfig = @"<log4net> 
             <appender name='RollingFileAppender' type='log4net.Appender.RollingFileAppender'> 
              <file value='C:\\logs\\Logger.log' /> 
              <appendToFile value='true' /> 
              <rollingStyle value='Composite' /> 
              <datePattern value='yyyyMMdd' /> 
              <maxSizeRollBackups value='200' /> 
              <maximumFileSize value='50MB' /> 
              <layout type='log4net.Layout.PatternLayout'> 
               <conversionPattern value='%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n' /> 
              </layout> 
             </appender> 
             <root> 
              <level value='ERROR' /> 
              <appender-ref ref='RollingFileAppender' /> 
             </root> 
            </log4net>"; 
      //add error default config 
      service.WebConfigModifications.Add(new SPWebConfigModification() 
      { 
       Path = "configuration", 
       Name = "log4net", 
       Sequence = 0, 
       Owner = CREATE_NAME, 
       Type = SPWebConfigModification.SPWebConfigModificationType.EnsureChildNode, 
       Value = log4netConfig 
      }); 

service.Update(); 
      service.ApplyWebConfigModifications(); 

Я хотел для создания другой функции, которая переписывает режим ошибок в log4net и меняет его на отладку, так что конечный пользователь не должен модифицировать веб-конфигурацию вручную. Проблема заключается в том, когда активирована вторая функция, она удаляет все, добавленное первой функцией.

Является ли это стандартным поведением? Любая активируемая функция удаляет изменения с помощью другой функции.

EDIT 2

Шаги для репликации

Создать 2 функции. оба из них должны добавить несколько различных записей в веб-конфигурацию.

  1. Активировать функцию 1 - Функция 1 изменения в веб-конфигурации
  2. Активировать функцию 2 - Функция 2 изменения в веб-конфигурации, но имеют 1 изменения прошли

Деактивировать обе особенности

  1. Активировать функцию 2 - Функциональные изменения 2 находятся в веб-конфигурации
  2. Активировать функцию 1 - Fea ры 1 изменения в веб-конфигурации, но имеют 2 изменения прошли

ответ

1

Причина первая конфигурация веб удаляется из-за блока кода:

service.WebConfigModifications.Clear(); 

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

Если вам нужно сделать что-то еще при активации или деактивации функции, попробуйте использовать Feature Receivers. Хороший пример, чтобы начать с веб-конфигураций и приемников функций, можно найти here.

Также, чтобы дать вам больше информации о кодовом блоке выше, вы даете вам проблемы, вы можете проверить проблему другого парня, у которого была аналогичная проблема here.

+0

Спасибо за ответ. Лемме проверите его один раз, и я вернусь к вам. – Anand

+0

Спасибо. Надеюсь, это устранит вашу проблему. Если нет, пожалуйста, дайте мне знать. –

+0

Ах, все нормально. Я начал писать эту функцию, скопировав другую функцию, и эта вещь появилась. Спасибо за вашу помощь. +50 – Anand

0

, если я понимаю, это правильно, что происходит, вы добавляете webconfigmodification, это не технически «добавил» еще, как это не было только что реализовано. Когда вы создали вторую модификацию, она перезаписывает первую созданную вами модификацию, которая по очереди стирает первую измененную модификацию, и это была та, которая была применена.

+0

Почему вы так верите? В моем коде я вызываю обновление и применяю методы, чтобы изменения сохранялись. Вы пытались воспроизвести проблему? – Anand

+0

Я не совсем уверен, честно, вот как я вижу код, раньше я сталкивался с подобным стилем, но не совсем с теми же строками кода. –

+0

Ну, это немного сложно переварить. Потому что был создан вызов для сохранения конфигурации и применения конфигурации. В любом случае спасибо за помощь – Anand

Смежные вопросы