winform wpf 同时使用log4net出错处理

最近有个项目,主要是Winform开发,但其中会使用wpf的用户控件,其都要使用log4net进行日志记录,在编译的过程中会报如下错误:

error MC1000: 未知的生成错误“因为没有预加载,所以无法解析程序集“log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a”的依赖项。在使用 ReflectionOnly API 时,必须通过 ReflectionOnlyAssemblyResolve 事件预加载或按需要加载依赖程序集。”

经排查,是因为log4net配置的问题,我日志类如下:

/**************************************************************
 * 类名:Log4Allen.cs
 * 描述:日志类,用于记录错误、异常、调试日志
 * 创建者:Allen
 * 时间:Jan 9,2016
 *
 * ***********************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace QACDR.Common
{
    /// <summary>
    /// 日志类
    /// </summary>
    public class Log4Allen
    {
        /// <summary>
        /// 输出日志到Log4Net
        /// </summary>
        /// <param name="t"></param>
        /// <param name="ex"></param>
        #region static void WriteLog(Type t, Exception ex)

        public static void WriteLog(Type t, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Error("Error", ex);
        }

        #endregion

        /// <summary>
        /// 输出日志到Log4Net
        /// </summary>
        /// <param name="t"></param>
        /// <param name="msg"></param>
        #region static void WriteLog(Type t, string msg)

        public static void WriteLog(Type t, string msg)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Error(msg);
        }

        #endregion
    }
}

  问题就在于[assembly: log4net.Config.XmlConfigurator(Watch = true)],wpf编译会加载解析log4net,这样就会报错,然后就换成另外一种方式初始化log4net的配置,更改之后的方案如下:

/**************************************************************
 * 类名:Log4Allen.cs
 * 描述:日志类,用于记录错误、异常、调试日志
 * 创建者:Allen
 * 时间:Jan 9,2016
 *
 * ***********************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace QACDR.Common
{
    /// <summary>
    /// 日志类
    /// </summary>
    public class Log4Allen
    {
        /// <summary>
        /// 初始化日志
        /// </summary>
        public static void InitLog()
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(
                new System.IO.FileInfo("Config\\log4net.config"));
        }

        /// <summary>
        /// 输出日志到Log4Net
        /// </summary>
        /// <param name="t"></param>
        /// <param name="ex"></param>
        #region static void WriteLog(Type t, Exception ex)

        public static void WriteLog(Type t, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Error("Error", ex);
        }

        #endregion

        /// <summary>
        /// 输出日志到Log4Net
        /// </summary>
        /// <param name="t"></param>
        /// <param name="msg"></param>
        #region static void WriteLog(Type t, string msg)

        public static void WriteLog(Type t, string msg)
        {
            log4net.ILog log = log4net.LogManager.GetLogger(t);
            log.Error(msg);
        }

        #endregion
    }
}

  完美解决Winform与wpf同时使用log4net。

				
时间: 2024-12-06 05:55:30

winform wpf 同时使用log4net出错处理的相关文章

C# net winform wpf 发送post数据和xml到网页

由于项目需要发送数据到网页 这里用aspx做测试 采用post以及get发送数据,页面进行数据  首先这个东西很简单很简单,基本上学过的都会,但是原谅一直搞cs几乎不搞bs的猿类吧.三四年没接触bs. 除了记录自己用意外.也希望能帮助别人 写程序与bs交互的处理webservice也没别的了.冷不丁的遇到了还抓瞎,只能网上搜罗然后测试在整理,在学习....... 希望帮助没接触过的,以及也是一直搞cs的猿类,请bs大神,高手,给出更多的解决方案 首先采用最简单的微软子提供的方式 aspx可以用r

C#游戏之路-winform,wpf,directx,opengl的了解

终于审核通过了,开通了我的博客,虽然这么多年,已经长期在从事java相关的架构工作,但是,其实我内心,喜欢的语言一直是c#,可惜,很多时候光靠一人的力量,改变不了什么,现在的我,打算抛开自己的工作,做自己真正喜欢的事情,我开这个博客的目的主要就是为了用c#来开发大型游戏,我的第一个目标,打算使用c#实现<传奇>这样的大型网络游戏,这样的游戏会分成服务端和客户端分别开发,我的前期目标是先实现客户端,如果想了解服务端的可以订阅我,我后续会一并写完的. 从现在开始重拾8年前的c#确实有点生疏,但其实

winform,wpf,winrt获取屏幕分辨率

winform 当前的屏幕除任务栏外的工作域大小     this.Width = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Width;     this.Height = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea.Height; 当前的屏幕包括任务栏的工作域大小 this.Width=System.Windows.Forms.Screen.PrimaryScre

winform/wpf 程序部署

(1):一些发布方式 ClickOnce是什么玩意儿,这个问题嘛,在21世纪的互联网严重发达的时代,估计也没有必要大费奏章去介绍了,弄不好的话,还有抄袭之嫌.因此,有关ClickOnce的介绍,各位朋友可以直接查找MSDN文档,或者看下面这里,这是百度百科上的,其实也是Ctrl + C版本.http://baike.baidu.com/view/1390498.htm 如果你对这些理论的东西不感兴趣,没关系,上面所提及的内容你完全可以无视之.我们只要知道,ClickOnce是一种应用程序部署方式

C# Winform WPF DeskBand 窗体嵌入任务栏,在任务栏显示文字

最近写了个小程序,用于将固态硬盘的写入量等信息显示在任务栏,最开始使用Windows API也可以实现,但是当任务栏托盘增加的时候,会被遮盖,最终采用了DeskBand来实现,填了很多坑. 参考的GitHub地址:https://github.com/dsafa/CSDeskBand DeskBand相关代码如下: COLORREF: // This code snippet was used by SharpShell. // using System.Drawing; using Syste

WPF使用Log4net.dll库的demo(转载加个人观点)

原文地址:http://blog.csdn.net/linraise/article/details/50547149 配置文件解析地址:http://blog.csdn.net/pfe_nova/article/details/12225349 1.引入库log4net.dll 2.在AssemblyInfo.cs中添加一行:在AssemblyInfo.cs中添加一行:(其中log4net.config对应配置文件名) [assembly: log4net.Config.XmlConfigur

winform项目使用log4net

原以为和webform一样,就是web.config换成App.config而已,结果日志死活不出来,搞了大半天才跑通. 我尝试了两种方式,都遇到了问题,最后都跑通了. 第一种:log4net节点配置全部写在App.config文件内. 1. 添加log4net.dll引用. 2. App.config的configuration节点下添加如下元素: <configSections> <section name="log4net" type="log4net

WinForm(WPF) splash screen demo with C#

https://www.codeproject.com/Messages/2549767/Splash-Screen.aspx https://www.codeproject.com/Articles/6511/Transparent-Splash-Screen https://www.codeproject.com/Articles/116875/WPF-Loading-Splash-Screen

Winform and WPF 第二遍双击快捷方式或应用程序打开原来的应用程序而不新建一个实例[进程通信 1]

private void Window_Loaded(object sender, RoutedEventArgs e)         {             Process[] pro = Process.GetProcesses();             int n = pro.Where(p => p.ProcessName.Equals("进程名称")).Count();             if (n > 1)             {