log*_*eks 69 c# configuration log4net class-library visual-studio-2008
我看不到VS2008向导为类库生成的app.config文件.在我的研究中,我发现在应用程序中只存在一个app.config.
将app.config手动添加到类库中是否是一件坏事,还是有任何其他方法可以满足类库中app.config的用途?
我需要在app.config文件中存储log4net配置信息.
And*_*ber 86
通常应该不添加app.config
文件到一个类库项目; 没有一些痛苦的弯曲和扭曲你将不会使用它.它根本不会伤害图书馆项目 - 它根本不会做任何事情.
而是配置使用您的库的应用程序; 所以所需的配置信息会去那里.可能使用您的库的每个应用程序可能会有不同的要求,因此这实际上也具有逻辑意义.
Joh*_*ers 46
我不知道为什么还没有给出这个答案:
通常,同一库的不同调用者将使用不同的配置.这意味着配置必须驻留在可执行应用程序中,而不是类库中.
您可以在类库项目中创建app.config.它将包含您在库中创建的项目的默认配置.例如,如果在类库中创建实体框架模型,它将包含连接字符串.
但是,调用库的可执行应用程序不会使用这些设置.相反,可以将这些设置从library.dll.config文件复制到调用方的app.config或web.config中,以便可以将它们更改为特定于调用方以及调用方所属的环境.部署.
这是第1天以来.NET的用法.
小智 37
Jon,很多意见都没有正确回答你的问题.
我会给出我的意见,然后告诉你如何做到你所要求的.
我认为没有理由为什么程序集不能拥有自己的配置文件.为什么第一级atomof(真正的单词?)是在应用程序级别?为什么不在解决方案级别?这是一个任意的,最佳猜测的决定,因此,一个意见.如果你要编写一个日志库并希望为它包含一个配置文件,那么它将全局使用,为什么你不能挂入内置设置功能?我们都做到了......试图为其他开发者提供"强大"的功能.怎么样?通过做出本质上转化为限制的假设.这正是MS对设置框架所做的,所以你必须"愚弄"一点.
要直接回答您的问题,只需手动添加配置文件(xml)并将其命名为与您的库匹配,并包含"config"扩展名.例:
MyDomain.Mylibrary.dll.Config
接下来,使用ConfigurationManager加载文件和访问设置:
string assemblyPath = new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath;
Configuration cfg = ConfigurationManager.OpenExeConfiguration(assemblyPath);
string result = cfg.AppSettings.Settings["TEST_SETTING"].Value;
Run Code Online (Sandbox Code Playgroud)
请注意,即使您已明确选择了应用程序配置文件,这也完全支持machine.config层次结构.换句话说,如果设置不存在,它将解决更高的问题.设置还将覆盖machine.config条目.
如果要使用log4Net配置项目日志记录,则在使用类库时,实际上不需要任何配置文件.您可以在类中配置log4net记录器,并可以将该类用作库.
由于log4net提供了配置它的所有选项.
请在下面找到代码.
public static void SetLogger(string pathName, string pattern)
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = pattern;
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = false;
roller.File = pathName;
roller.Layout = patternLayout;
roller.MaxSizeRollBackups = 5;
roller.MaximumFileSize = "1GB";
roller.RollingStyle = RollingFileAppender.RollingMode.Size;
roller.StaticLogFileName = true;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);
MemoryAppender memory = new MemoryAppender();
memory.ActivateOptions();
hierarchy.Root.AddAppender(memory);
hierarchy.Root.Level = log4net.Core.Level.Info;
hierarchy.Configured = true;
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以直接使用所需的路径和模式调用SetLogger,而不是调用XmlConfigurator.Configure(新的FileInfo("app.config")),以在Global.asax应用程序启动函数中设置记录器.
并使用以下代码记录错误.
public static void getLog(string className, string message)
{
log4net.ILog iLOG = LogManager.GetLogger(className);
iLOG.Error(message); // Info, Fatal, Warn, Debug
}
Run Code Online (Sandbox Code Playgroud)
通过使用以下代码,您无需在应用程序web.config中或库的app.config内部写入单行.
小智 6
实际上,您正在实现的类库正在从正在使用它的应用程序内部的app.config中检索信息,因此,在VS.net中实现类库配置的最正确方法是在NET中准备app.config。应用程序来配置它消耗的所有内容,例如库配置。
我曾有点用log4net的,我发现一个谁编写的应用程序一直对主内log4net的配置的部分的app.config。
我希望这个信息对您有所帮助。
待会见,并发表有关找到的解决方案的评论。
编辑:
在下一个链接中,您具有带有log4net部分的app.config:
http://weblogs.asp.net/tgraham/archive/2007/03/15/a-realistic-log4net-config.aspx
归档时间: |
|
查看次数: |
92162 次 |
最近记录: |