And how to 수리입니다 지정하십시오. 시스템스티페니시알이제이션렉세페시옹 오류?

private static void Main(string[] args)
{
    string str = null;
    Logger.InitUserLogWithRotation();            // <--- error occur
    ...
}

When I 구축 프로젝트, it 주님으로부터그에게 오류:. 하지만 나는 그것을 실행할 때 항상 중단되었습니다.

그러나 노력했다고 디버그로 프로젝트, 처음에는 할말이다 시스템스티페니시알이제이션렉세페시옹 오류가 발생했습니다.

39, ve, 아직 발견되지 솔루션이므로 i& 이미 구글링 했습니다.

하지만 모든 것은 옳지 않은 것 같은데, t # 39 can& 초기화하지 가변적입니다 코드 파일을 찾을 수 있습니다.

제발 도와주세요. 새로운 i& # 39 m, C #.

감사합니다.

※ 다음은 로그기록기 클래스 코드

public class Logger
{
    private static int HDLOG_PRIORITY_DEBUG = 4;
    private static int HDLOG_PRIORITY_ERROR = 1;
    private static int HDLOG_PRIORITY_FATAL = 0;
    private static int HDLOG_PRIORITY_INFO = 3;
    private static int HDLOG_PRIORITY_WARNING = 2;
    public static int LOG_LEVEL_DEBUG = 4;
    public static int LOG_LEVEL_ERROR = 2;
    public static int LOG_LEVEL_FATAL = 1;
    public static int LOG_LEVEL_INFO = 5;
    public static int LOG_LEVEL_WARNING = 3;
    private static string s_bstCommonAppData = Path.Combine(s_commonAppData, "XXXX");
    private static string s_bstUserDataDir = Path.Combine(s_bstCommonAppData, "UserData");
    private static string s_commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
    private static bool s_consoleLogging = false;
    private static FileStream s_fileStream;
    public static HdLoggerCallback s_HdLoggerCallback;
    private static string s_logDir = null;
    private static string s_logFileName = "XXXX";
    private static string s_logFilePath = null;
    public static int s_logFileSize = 0xa00000;
    private static bool s_loggerInited = false;
    private static string s_logLevels = null;
    private static int s_logRotationTime = 0x7530;
    private static string s_logStringDebug = "DEBUG";
    private static string s_logStringError = "ERROR";
    private static string s_logStringFatal = "FATAL";
    private static string s_logStringInfo = "INFO";
    private static string s_logStringWarning = "WARNING";
    private static int s_processId = -1;
    private static string s_processName = "Unknown";
    private static object s_sync = new object();
    public static int s_totalLogFileNum = 5;
    private static TextWriter writer = Console.Error;

    private static void Close()
    {
        if (!s_consoleLogging)
        {
            writer.Close();
            s_fileStream.Dispose();
            writer.Dispose();
        }
    }

    public static void Debug(string msg)
    {
        Debug("{0}", new object[] { msg });
    }

    public static void Debug(string fmt, params object[] args)
    {
        Print(LOG_LEVEL_DEBUG, s_processName, fmt, args);
    }

    private static void DoLogRotation()
    {
    Label_0000:
        Thread.Sleep(s_logRotationTime);
        try
        {
            lock (s_sync)
            {
                FileInfo info = new FileInfo(s_logFilePath);
                if (info.Length >= s_logFileSize)
                {
                    string destFileName = s_logFilePath + ".1";
                    string path = s_logFilePath + "." + s_totalLogFileNum;
                    if (File.Exists(path))
                    {
                        File.Delete(path);
                    }
                    for (int i = s_totalLogFileNum - 1; i >= 1; i--)
                    {
                        string str3 = s_logFilePath + "." + i;
                        string str4 = s_logFilePath + "." + (i + 1);
                        if (File.Exists(str3))
                        {
                            File.Move(str3, str4);
                        }
                    }
                    File.Move(s_logFilePath, destFileName);
                }
            }
            goto Label_0000;
        }
        catch (Exception)
        {
            goto Label_0000;
        }
    }

    public static void Error(string msg)
    {
        Error("{0}", new object[] { msg });
    }

    public static void Error(string fmt, params object[] args)
    {
        Print(LOG_LEVEL_ERROR, s_processName, fmt, args);
    }

    public static void Fatal(string msg)
    {
        Fatal("{0}", new object[] { msg });
    }

    public static void Fatal(string fmt, params object[] args)
    {
        Print(LOG_LEVEL_FATAL, s_processName, fmt, args);
    }

    private static string GetLogDir(bool userSpecificLog)
    {
        string str;
        if (s_logDir != null)
        {
            return s_logDir;
        }
        try
        {
            if (userSpecificLog)
            {
                str = Path.Combine(s_bstUserDataDir, "Logs");
            }
            else
            {
                str = (string) Registry.LocalMachine.OpenSubKey(@"Software\XXXX").GetValue("LogDir");
            }
        }
        catch (Exception)
        {
            str = Path.Combine(s_bstUserDataDir, "Logs");
        }
        s_logDir = str;
        return str;
    }

    private static string GetPrefix(string tag, string logLevel)
    {
        int managedThreadId = Thread.CurrentThread.ManagedThreadId;
        DateTime now = DateTime.Now;
        return string.Format("{0:D4}-{1:D2}-{2:D2} {3:D2}:{4:D2}:{5:D2}.{6:D3} {7}:{8:X8} ({9}). {10}: ", new object[] { now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond, s_processId, managedThreadId, tag, logLevel });
    }

    public static TextWriter GetWriter()
    {
        return new Writer(delegate (string msg) {
            Print(msg);
        });
    }

    private static void HdLogger(int prio, uint tid, string tag, string msg)
    {
        int level = 0;
        if (prio == HDLOG_PRIORITY_FATAL)
        {
            level = LOG_LEVEL_FATAL;
        }
        else if (prio == HDLOG_PRIORITY_ERROR)
        {
            level = LOG_LEVEL_ERROR;
        }
        else if (prio == HDLOG_PRIORITY_WARNING)
        {
            level = LOG_LEVEL_WARNING;
        }
        else if (prio == HDLOG_PRIORITY_INFO)
        {
            level = LOG_LEVEL_INFO;
        }
        else if (prio == HDLOG_PRIORITY_DEBUG)
        {
            level = LOG_LEVEL_DEBUG;
        }
        Print(level, tag, "{0:X8}: {1}", new object[] { tid, msg });
    }

    public static void Info(string msg)
    {
        Info("{0}", new object[] { msg });
    }

    public static void Info(string fmt, params object[] args)
    {
        Print(LOG_LEVEL_INFO, s_processName, fmt, args);
    }

    public static void InitConsoleLog()
    {
        InitLog("-", true, false);
    }

    public static void InitLog(string logFileName, bool userSpecificLog, bool doLogRotation)
    {
        s_loggerInited = true;
        s_HdLoggerCallback = new HdLoggerCallback(Logger.HdLogger);
        s_processId = Process.GetCurrentProcess().Id;
        s_processName = Process.GetCurrentProcess().ProcessName;
        if (logFileName == "-")
        {
            writer = Console.Error;
            s_consoleLogging = true;
        }
        else
        {
            if (logFileName == null)
            {
                logFileName = s_logFileName;
            }
            if (userSpecificLog)
            {
                logFileName = logFileName + "Users";
            }
            string logDir = GetLogDir(userSpecificLog);
            string str2 = string.Format(@"{0}\{1}.log", logDir, logFileName);
            if (!Directory.Exists(logDir))
            {
                Directory.CreateDirectory(logDir);
            }
            s_logFilePath = str2;
            LogLevelsInit();
            lock (s_sync)
            {
                Open();
            }
            if (doLogRotation)
            {
                new Thread(() => DoLogRotation()) { IsBackground = true }.Start();
            }
        }
    }

    public static void InitSystemLog()
    {
        InitLog(null, false, false);
    }

    public static void InitSystemLogWithRotation()
    {
        InitLog(null, false, true);
    }

    public static void InitUserLog()
    {
        InitLog(null, true, false);
    }

    public static void InitUserLogWithRotation()
    {
        InitLog(null, true, true);
    }

    private static bool IsLogLevelEnabled(string tag, string level)
    {
        if (s_logLevels == null)
        {
            return false;
        }
        return (s_logLevels.StartsWith("ALL") || s_logLevels.Contains((tag + ":" + level).ToUpper()));
    }

    private static void LogLevelsInit()
    {
        string name = @"Software\XXXX\Config";
        try
        {
            using (RegistryKey key = Registry.LocalMachine.OpenSubKey(name))
            {
                s_logLevels = (string) key.GetValue("DebugLogs");
            }
        }
        catch (Exception)
        {
            return;
        }
        if (s_logLevels != null)
        {
            s_logLevels = s_logLevels.ToUpper();
        }
    }

    private static void Open()
    {
        if (!s_consoleLogging)
        {
            if (!s_loggerInited)
            {
                InitLog("-", false, false);
                s_loggerInited = true;
            }
            else
            {
                s_fileStream = new FileStream(s_logFilePath, FileMode.Append, FileAccess.Write, FileShare.Delete | FileShare.ReadWrite);
                writer = new StreamWriter(s_fileStream, Encoding.UTF8);
            }
        }
    }

    public static void Print(string msg)
    {
        Print("{0}", new object[] { msg });
    }

    public static void Print(string fmt, params object[] args)
    {
        Print(LOG_LEVEL_INFO, s_processName, fmt, args);
    }

    public static void Print(int level, string tag, string fmt, params object[] args)
    {
        string str = "UNKNOWN";
        if (level == LOG_LEVEL_FATAL)
        {
            str = s_logStringFatal;
        }
        else if (level == LOG_LEVEL_ERROR)
        {
            str = s_logStringError;
        }
        else if (level == LOG_LEVEL_WARNING)
        {
            str = s_logStringWarning;
        }
        else if (level == LOG_LEVEL_INFO)
        {
            str = s_logStringInfo;
        }
        else if (level == LOG_LEVEL_DEBUG)
        {
            str = s_logStringDebug;
        }
        if ((level != LOG_LEVEL_DEBUG) || IsLogLevelEnabled(tag, str))
        {
            lock (s_sync)
            {
                Open();
                writer.WriteLine(GetPrefix(tag, str) + fmt, args);
                writer.Flush();
                Close();
            }
        }
    }

    public static void SetLogDir(string logDir)
    {
        s_logDir = logDir;
    }

    public static void Warning(string msg)
    {
        Warning("{0}", new object[] { msg });
    }

    public static void Warning(string fmt, params object[] args)
    {
        Print(LOG_LEVEL_WARNING, s_processName, fmt, args);
    }

    public delegate void HdLoggerCallback(int prio, uint tid, string tag, string msg);

    public class Writer : TextWriter
    {
        private WriteFunc writeFunc;

        public Writer(WriteFunc writeFunc)
        {
            this.writeFunc = writeFunc;
        }

        public override void WriteLine(string msg)
        {
            this.writeFunc(msg);
        }

        public override void WriteLine(string fmt, object obj)
        {
            this.writeFunc(string.Format(fmt, obj));
        }

        public override void WriteLine(string fmt, object[] objs)
        {
            this.writeFunc(string.Format(fmt, objs));
        }

        public override System.Text.Encoding Encoding
        {
            get
            {
                return System.Text.Encoding.UTF8;
            }
        }

        public delegate void WriteFunc(string msg);
    }
}
질문에 대한 의견 (2)
해결책

',' 모든 유형의 때마다 티퍼니시알이제이션렉세페시옹 발생하며 확인란 초기화하지 논리를 가지고 있는 기술서임을 최초로 틀렸다니까 idfsysobject. 발생하며, 즉 케이스. '로그기록기'.

초기화하지 논리를 다음과 같습니다. 이 type& # 39 의 정적임 구성자를 (이 경우 - 난 didn& # 39 가 아닌 't miss it - 넌 , 로거에') 와 현장 초기화하지.

꽤 많은 필드이므로 초기화는 &quot uncritical"; '에서' 로거의 다음과 같은 경우를 제외하고 선:

private static string s_bstCommonAppData = Path.Combine(s_commonAppData, "XXXX");
private static string s_bstUserDataDir = Path.Combine(s_bstCommonAppData, "UserData");
private static string s_commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

's_commonAppData' 는 'null' 지점에 '파트리크롬바인 (s_commonAppData &quot XXXX&quot,,),' 입니다. 멀리는 I& # 39, m 있는데 이러한 초기화 일어날 수 있는 정확한 오더할 너회가 작성했습니까 그러하매 동일팔레트에 '-' 그 위로 2 이상의 찬성을 s_commonAppData 흐름선;)

해설 (0)

'코드' 가 있을 때 그 과정 중에 발생하는 시스템스티페니시알이제이션렉세페시옹 csetup 유형을 로드중 예외를 던진다.

그 전에 준비할 때 처음 유형, .NET 로드되는지 합니다 모든 정적인 필드를 사용하는 유형:. 가끔 초기화하지 코드 실행 합니다. 이 때 그 코드를 장애가 발생할 수 있는 '시스템스티페니시알이제이션렉세페시옹'.

정적인 필드를 일부 코드를 실행할 수 있는 특정 경우, 다음과 같은 세 가지:

private static string s_bstCommonAppData = Path.Combine(s_commonAppData, "XXXX");
private static string s_bstUserDataDir = Path.Combine(s_bstCommonAppData, "UserData");
private static string s_commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

참고로 '다름' 에 ',' s_bstCommonAppData s_commonAppData 것이 종속성 앞당겨 선언했다. 따라서 '가치' 는 'null' '' 호출됨 파트리크롬바인 s_commonAppData 당시에 그, 그 결과 '아르구망누 알렉세페시옹'. '이' '와' s_bstCommonAppData s_bstUserDataDir 마찬가지다. 원하는 순서대로 역뱡향으로 선언될 수 있도록 초기화.

이 문제를 해결하기 위해 다시 정렬할 흐름선.

private static string s_commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
private static string s_bstCommonAppData = Path.Combine(s_commonAppData, "XXXX");
private static string s_bstUserDataDir = Path.Combine(s_bstCommonAppData, "UserData");
해설 (0)

i. '이' 의 '속성' 티퍼니시알이제이션렉세페시옹 네렉세페시옹 dbasyb

ii. 또한, 이 버전의 어셈블리들 런타임용으로 개발하십시오 일치하지 않는 인해 발생할 수 있습니다. 확인하십시오 런타임용으로 개발하십시오 버전의 주 어셈블리 (호출 응용 프로그램) 과 조립품을 합니다.

해설 (0)

이 선은 문제가 (또는 최소한 한 고객의 문제를 더 많이 있으면 , ):

private static string s_bstCommonAppData = Path.Combine(s_commonAppData, "XXXX");
private static string s_bstUserDataDir = Path.Combine(s_bstCommonAppData, "UserData");
private static string s_commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);

일부 정적임 너회가 참조입니다 초기화 있는 구성원을 다른 정적 멤버. # 39 이것은 안 좋은 생각 때문에 doesn& 컴파일러와의 주문하십시오 저들이요 초기화하려면 알고 있는 것이다. 그 결과 '중', '아직' 종속 필드이므로 초기화하지 s_bstCommonAppData s_commonAppData 초기화되었습니다 도왔으매 틀렸다니까 호출하십시오 파트리크롬바인 (null, XXXX&quot ";) '와' 이 방법을 nulll 주장을 인정하지 않았다.

이것을 해결할 수 있다는 것을 확실히 하는 필드용 초기화하지 사용되는 다른 필드는 첫 선언했다.

private static string s_commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
private static string s_bstCommonAppData = Path.Combine(s_commonAppData, "XXXX");
private static string s_bstUserDataDir = Path.Combine(s_bstCommonAppData, "UserData");

또는 정적 구성자를 사용하여 명시적으로 오더할 할당:

private static string s_bstCommonAppData;
private static string s_bstUserDataDir;
private static string s_commonAppData;

static Logger()
{
    s_commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
    s_bstCommonAppData = Path.Combine(s_commonAppData, "XXXX");
    s_bstUserDataDir = Path.Combine(s_bstCommonAppData, "UserData");
}
해설 (1)

사용자 지정 특성을 가지고 있는 경우 아프스팅. 고객의


첫 번째 child in the '&lt 태그번호 confuguration>; '.

해설 (0)

내가 경험한 '' 내 .NET framework 4 project& 시스템스티페니시알이제이션렉세페시옹 # 39 의 아프리카누스프리그스 인해 다른 오류 나를 가져오는 파스턴 아프리카누스프리그스 살펴보는 데 감사합니다. 내 콘피그체티언스 제대로 정의되어 있다. 그러나 정의되지 않은 요소 중 발생할 수 있는 단면에는 예외가 발생합니다.

이 문제가 생길 수 있는 것은 매우 잘못된 티퍼니시알이제이션렉세페시옹 대퍼콘피그 생성할지 '결론'.

콘피그라티온에로스엑스티온 의해 생성될 수 있는 의미 있는 '보다' 에 의해 대퍼콘피그 기다림커서 같은 오류가 아닌 선수단 내부의 구성용 값을 액세스하려면 때까지 메서드입니다 class 레벨 코드가.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Collections.Specialized;

namespace ConfigTest
{
    class Program
    {
        public static string machinename;
        public static string hostname;
        public static NameValueCollection _AppSettings;

        static void Main(string[] args)
        {
            machinename = System.Net.Dns.GetHostName().ToLower();
            hostname = "abc.com";// System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).HostName.ToLower().Replace(machinename + ".", "");
            _AppSettings = ConfigurationManager.GetSection("domain/" + hostname) as System.Collections.Specialized.NameValueCollection;
        }
    }
}
해설 (0)

만약 이 오래된 질문, 하지만 난 그러니까말이야 이는 비트 오류 때문에 내 솔루션이므로 최근 생각해봤죠 꼭 이래야겠어요 전달하십시오 따라.

내 에서 오류가 있는 것 같다 '라는 파일 및 이전 대퍼콘피그 &quot place"; net 에서 업그레이드합니다 4.0 에서 .net 4.5.1.

이전 사업을 시작했을 때 나는 attaboy 를 업그레이드한 뒤 후속 레임워크 4.5.1 티퍼니시알이제이션렉세페시옹. 방망이를 맞아 떨어져. 심지어 단계별로 코드 한 줄 수 있다.

내가 만든 것으로, 새로운 대퍼콘피그 테스트하려면 brand new wpf 프로젝트는 다음과 같은 파일 한다.



      <section name="YourAppName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />

내가 있는 한, 난 롬폭 경영학이라 떨어트림

단, 필요에 따라 조금씩 차이가 있을 수 있습니다. 내가 만들어 갈 것 "이라고 더미 프로젝트 파일 및 지켜보리니 대퍼콘피그 생성할지 체크아웃합니다 경우 다른 사항은요 없습니다.

따라서 누군가가 바란다. 즐거운 코딩!

해설 (0)

주변에 있는 래퍼 '이' 티퍼니시알이제이션렉세페시옹 발생하며 비호환성의 예외가 throw 클래스에 의해 초기화. 이 클래스는 상속됨 수 없습니다.

정적 구성자를 티퍼니시알이제이션렉세페시옹 '이라고도 부른다.

해설 (0)

이 때, 이는 오류가 나는 시스템스티페인시알제이션렉세페시옹 인해 같은 파일이 움직이십시오 찾았다.

 File.Move(DestinationFilePath, SourceFilePath)

실제로, 올바른 길을 스왑된 오류가 난 이미 한 데 따른 것이다.

 File.Move(SourceFilePath, DestinationFilePath)
해설 (0)

같은 idfsysobject. 시뮬 가져오는 문제를 가지고 있었다. 어느 정도 시간이 걸린 찾는 중. 난 이미 저의 경우는 예외 던지고 있는 정적 클래스 수신기마다 구성자를 유틸리티에는 (랩할 it). 그래서 내 문제가 롬폭 정적 구성자를.

해설 (0)

내가 가진 이 문제가 발생합니다. 그것은 아마도 언급된 바와 같이 정적 선언 문제를 해결할 수 있습니다. 왜냐하면 내가 가진 것은 내 경우에는 정적 내의 디버그입니다 핵심이 되는 말이다. 즉 (c # 에서)

#if DEBUG
    public static bool DOTHISISINDEBUGONLY = false;
#endif

그리고 그 이후로 나는 모든 것을 fine until I 협력했습니다 작성된 코드를 공개 버전은 이전 버전의 맡을게 오류- 대해서도 릴리스에서는 코드. 당시 내가 모든 것을 한 번 절을 가변적입니다 디버그로 빼냅니다 정상으로 돌아왔다.

해설 (1)