1

我正在使用带有共享点 2010 的 log4Net。我有一个功能,当我的灵魂使用以下代码以错误模式部署时,它会自动添加 log4net 配置

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 的错误模式并将其更改为调试,以便最终用户不必手动修改 web 配置。问题是当第二个功能被激活时,它会删除第一个功能添加的所有内容。

这是标准行为吗??任何将激活的功能都会删除其他功能的更改。

编辑 2

复制步骤

创建 2 个特征。他们都应该在 web config 中添加一些不同的条目。

  1. 激活功能 1 - 功能 1 更改在 Web 配置中
  2. 激活功能 2 - 功能 2 更改在 Web 配置中,但功能 1 更改已消失

停用这两个功能

  1. 激活功能 2 - 功能 2 更改在 Web 配置中
  2. 激活功能 1 - 功能 1 更改在 Web 配置中,但功能 2 更改消失了
4

2 回答 2

1

之所以去掉第一个web配置,是因为代码块:

service.WebConfigModifications.Clear();

基本上,您是说在将项目添加到功能中之前,您将清除 Web 配置中设置的所有其他配置。删除上述代码块应该可以解决您的问题。

如果您在激活或停用功能时需要做一些其他事情,请尝试使用功能接收器。可以在此处找到从 Web 配置和功能接收器开始的一个很好的示例。

另外,为了让您对上面的代码块有更多了解,您可以在此处查看另一个有类似问题的人的问题。

于 2013-04-22T18:04:20.017 回答
0

如果我理解正确的话,发生的事情是你添加了一个 webconfigmodification,这在技术上还没有“添加”,因为它还没有实现。当您创建第二个修改时,它会覆盖您创建的第一个修改,这反过来会删除所做的第一个修改,这就是应用的修改。

于 2013-04-18T13:12:00.910 回答