我有一个类,类里边有一个静态变量,该类还会有一个静态构造对于该变量进行初始化,同时该构造会使用log4net生成日志文件。 代码如下: public class StaticVar
    {
        private static int test;
        static StaticVar()
        {
            log4net.Config.XmlConfigurator.Configure();            log4net.ILog logger = log4net.LogManager.GetLogger("File");
            logger.Info("自定义记录错误日志:222222222222" + DateTime.Now.ToString());            test = 0;
        }
        public static int Get()
        {
            test = test + 1;
            return test;
        }
    }现在有这样的问题,每次我访问日志生成的记事本文档,静态变量就会被初始化(也就是说,该静态构造又被重新调用),请问是什么原因?是否可以解决?或者说由于我C#基础不好才造成理解有了问题?

解决方案 »

  1.   

    楼主选的分类是ASP.NET,web应用程序经常会被重启,很正常。
      

  2.   

    每次访问都会初始化,关闭了浏览器就释放对象了,就算是static也不行。
    要保留全局变量 你可以试试在application_start中写
      

  3.   


    但是我并没有主动的重新启动WEB服务,只是打开了一下bin中生成的日志文档而已。
      

  4.   


            public class StaticVar
            {
                private static int test;
                static StaticVar()
                {
                    test = 0;
                }
                public static int Get()
                {
                    test = test + 1;
                    return test;
                }
            }
            private void button1_Click(object sender, EventArgs e)
            {
                StaticVar.Get();
            }这么用没错,你肯定用错了
      

  5.   


    日志应该放在App_Data目录,更改bin目录内的文件也会导致应用程序重启.
      

  6.   


    static是可以全局共享的。
    我拿两个不同的浏览器测试了。确实是可以共享使用static了。
    只是一打开日志文件,那么静态构造就又会重新运行了。
      

  7.   


    1.我是web项目引用的一个数据访问的类库项目,在类库项目中存放着我的静态方法。
    2.配置log4net能配置存储至App_Data文件中吗?
    3.实际上我并没有更改bin目录内文件,只是打开了一下…
      

  8.   

    web应用程序被重启,静态字段被初始化,都应该视为正常情况。即使你不动bin目录,iis也会定期回收应用程序池
      

  9.   

    用单例模式就可以了
     public class StaticVar    
     {         
        private static volatile StaticVar instance = null;
        private static object lockHelper = new object();
      private static int test;         
      private StaticVar()         
    {             
    log4net.Config.XmlConfigurator.Configure();               
    log4net.ILog logger = log4net.LogManager.GetLogger("File");             
    logger.Info("自定义记录错误日志:222222222222" + DateTime.Now.ToString());               
    test = 0;         
    }         
    public int Get()         
    {             
    test = test + 1;             
    return test;         
    }  
    /// <summary>
    /// 单体模式返回当前类的实例
    /// </summary>
    /// <returns></returns>
    public static StaticVar GetStaticVar()
    {
    if (instance == null)
    {
    lock (lockHelper)
    {
    if (instance == null)
    {
    instance =  new Hard();
    }
    }
    }
    return instance;

    } StaticVar sv=StaticVar.GetStaticVar();Response.Write("sv1="+ sv.Get() +"<br/>");StaticVar sv2=StaticVar.GetStaticVar();Response.Write("sv2="+ sv2.Get() +"<br/>");
      

  10.   

    instance =  new Hard();  改成 instance =  new StaticVar();
      

  11.   


    其实我的实际项目中,是一个wcf服务…当然也是发布在IIS下的。发现一个奇怪的问题,我在bin目录中,自己新建了一个文本文档。重新打开后,静态变量并没有被初始化。看来应该得从log4net中入手去解决这个问题了。
      

  12.   


    iis寄宿,实际跟web应用程序一样了。http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx
      

  13.   

    非常感谢大家。
    已经解决了,是log4net生成的日志文件的问题,生成的日志不存入Bin中就可以了。
    至于为什么这样,不太清楚…