IHost gibt die Protokolldatei nach Dispose() nicht freiC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 IHost gibt die Protokolldatei nach Dispose() nicht frei

Post by Anonymous »

Ich versuche, eine Protokolldatei zu lesen, die von einem benutzerdefinierten ILoggerProvider in einer Dotnet-Anwendung geschrieben wurde:

Code: Select all

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);
In meinem benutzerdefinierten Logger-Anbieter öffne ich die Datei im Anhängemodus:

Code: Select all

_logFileStream = new FileStream(logFilePath, new FileStreamOptions()
{
Access = FileAccess.Write,
Mode = FileMode.Append,
Share = FileShare.ReadWrite
});
Und schließen/entsorgen:

Code: Select all

public override void Dispose()
{
if (_logFileStream != null)
{
_logFileStream.Close();
_logFileStream.Dispose();
}
}
Wenn ich jedoch versuche, diese Datei zu lesen, nachdem die Verwendung den IHost hätte entsorgen sollen, ist er immer noch gesperrt (Der Prozess kann nicht auf die Datei zugreifen, weil sie von einem anderen Prozess verwendet wird.)
Ich habe versucht, dem Host einen Shutdown/Warten hinzuzufügen:

Code: Select all

host.StopAsync();
host.WaitForShutdown();
Ich habe sogar versucht, GC.Collect() auszuführen, aber die Datei bleibt immer noch vom Hostprozess gesperrt.
Wie kann ich diesen IHost dazu bringen, meine Datei loszulassen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post