IHost не освобождает файл журнала после Dispose()C#

Место общения программистов C#
Ответить
Anonymous
 IHost не освобождает файл журнала после Dispose()

Сообщение Anonymous »

Я пытаюсь прочитать файл журнала, записанный из пользовательского ILoggerProvider в приложении dotnet:

Код: Выделить всё

HostApplicationBuilder builder = Host.CreateApplicationBuilder();
builder.Logging.ClearProviders();
builder.Logging.AddCustomLogger(logFilePath);

using (IHost host = builder.Build())
{
host.RunAsync();
var hostLogger = host.Services.GetRequiredService();
hostLogger.LogDebug("debug");
}

string readLog = File.ReadAllText(logFilePath, Encoding.Unicode);
Console.WriteLine(readLog);
В моем пользовательском поставщике средств ведения журнала я открываю файл в режиме добавления:

Код: Выделить всё

_logFileStream = new FileStream(logFilePath, new FileStreamOptions()
{
Access = FileAccess.Write,
Mode = FileMode.Append,
Share = FileShare.ReadWrite
});
И закройте/удалите его:

Код: Выделить всё

public override void Dispose()
{
if (_logFileStream != null)
{
_logFileStream.Close();
_logFileStream.Dispose();
}
}
Однако, когда я пытаюсь прочитать этот файл после того, как использование должно было удалить IHost, он все еще заблокирован (Процесс не может получить доступ к файлу, поскольку он используется другим процессом.)
Я пробовал добавить на хост завершение работы/ожидание:

Код: Выделить всё

host.StopAsync();
host.WaitForShutdown();
Я даже пытался запустить GC.Collect(), но файл все равно остается заблокированным хост-процессом.
Как мне заставить этот IHost освободить мой файл?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... er-dispose
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»