私が最初Log
への書き込み時にエラーが発生し{"Index (zero based) must be greater than or equal to zero and less than the size of the argument list."}
System.TypeInitializationExceptionログオブジェクトの作成中にエラーが発生しました。私は新しいプロジェクトを作成し、ちょうど次<code>Log</code>ファイルを書きましたが、<code>unhandled exception of type 'System.TypeInitializationException' occured in My_Project.exe</code></p> <p>内部例外に遭遇していますよC#
と述べています。たとえば、次のコードを使用すると、プログラムはエラーメッセージとともにクラッシュします。
using System;
using System.Windows.Forms;
using My_Project.forms;
namespace My_Project {
public static class Program {
[STAThread]
public static void Main() {
Utility.MyLog.Write("Test"); //<-- ERROR OCCURS HERE
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Window());
}
}
}
ログインがインスタンス化されているのはここ。ここ
public static class Utility
{
// DEFAULT LOG OUTPUT.
public static Log MyLog = new Log();
...
}
..だ
using System;
using System.IO;
using System.Reflection;
using My_Project.Properties;
// STATIC USING MEMBERS
using static My_Project.LogFormat;
using static System.IO.File;
using static My_Project.Utility;
namespace My_Project {
public enum LogFormat { None, Message, Evaluate, Process, Result }
public sealed class Log {
// USED TO LOCK THE OUTPUT THREAD WHEN WRITING TO A FILE.
private readonly object _lock = new object();
// DEFAULT VARIABLES
public readonly string FileName;
public readonly string FilePath;
// DEFAULT CONSTRUCTOR
public Log(string fileName = null, string filePath = null) {
FileName = fileName ?? Resources.DefaultLogFileName;
var directoryInfo = Directory.GetParent(Directory.GetCurrentDirectory()).Parent;
if (directoryInfo != null)
filePath = Path.Combine(filePath ?? directoryInfo.FullName, Resources.DefaultLogFilePath, FileName);
FilePath = filePath;
var projectName = Assembly.GetCallingAssembly().GetName().Name.ToUpper();
Write("Hello World!");
}
// WRITES TO A TXT FILE, AND AUTO-CREATES A FILE IF IT DOESN'T EXIST.
public void Write(string message) {
lock (_lock) {
try {
AppendAllText(FilePath, message);
} catch (DirectoryNotFoundException ex) {
Console.WriteLine(string.Format(Resources.Error_CannotFindLogFile), ex.Message);
throw;
}
}
}
// OPENS THE LOG FILE IN NOTEPAD.
public void Open() => OpenProgram(FilePath);
// CLEARS ALL CONTENTS FROM LOG.TXT.
public void Clear() => WriteAllText(FilePath, string.Empty);
}
}
は私が間違って何をやっている...それで、これまで全体ですが、私のLog.cs
ファイルのですか?
これは、静的メンバー(メソッド/コンストラクターを呼び出すstatic prop/field宣言、または静的コンストラクターのいずれか)の初期化コードにエラーがあるために発生します。あなたのケースでは、 'ユーティリティ'型は構築することができません。これを行うには、新しい 'Log'をうまく構築する必要があるからです。コード内で 'Utility'クラスが初めて参照されるときには、型初期化子が実行されます(' public static Log MyLog = new Log(); ')' new Log() 'が投げているようです。デバッガを使用します。問題の発生場所を確認します。 – spender