我正在使用带共享点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] <%X{auth}> - %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的错误模式写入并将其更改为debug,以便最终用户无需手动修改Web配置。 问题是当第二个功能被激活时,它会删除第一个功能添加的所有内容。
这是标准行为吗?任何将激活的功能都会删除其他功能的更改。
编辑2
复制步骤
创建2个功能。他们俩都应该在web配置中添加一些不同的条目。
停用这两项功能
答案 0 :(得分:1)
删除第一个Web配置的原因是代码块:
service.WebConfigModifications.Clear();
基本上,您说在添加功能中的项目之前,您将清除Web配置中设置的所有其他配置。删除所述代码块应该可以解决您的问题。
如果您在激活或停用功能时需要执行其他操作,请尝试使用功能接收器。可以找到一个从Web配置和功能接收器开始的好例子here。
另外,为了让您对上面的代码块有更多的了解,可以解决问题,您可以查看另一个有类似问题的人here。
答案 1 :(得分:0)
如果我理解正确的话,发生的事情是你添加一个webconfigmodification,这在技术上并没有“添加”,因为它还没有实现。当您创建第二个修改时,它会覆盖您创建的第一个修改,而第一个修改将删除所做的第一个修改,这就是应用的修改。