Files
Libation/Source/LibationFileManager/InstallAssemblyFailure.cs
T
Cursor Agentandrmcrackan c4b4fa6971 Recognise any install-folder assembly failure, and let the rollback finish
Three separate reasons the recovery added for #1878 could not help the install
in issue #2001:

Classification was by assembly name, covering only EntityFrameworkCore,
Microsoft.Data.Sqlite and LibationUiBase, so a Serilog bind failure reached
neither the emergency rollback nor an actionable message. Match on the assembly
reference instead and compare the requested version against the file on disk,
so the dialog can say which file is stale and what version it should be. A
stale file and an absent one report identically through the loader, which is
why the version has to be read to tell them apart.

RestoreFromBackup wrote over assemblies this process had already loaded and
mapped. That segfaulted the process on Linux and Windows denies the write, so
the rollback never completed either way. Move the loaded file aside first and
sweep the leavings on a later startup.

Serilog.dll and three more assemblies Libation cannot start without were not in
the upgrade manifest, so an overlay could lose one and still verify clean.

Co-authored-by: rmcrackan <rmcrackan@gmail.com>
2026-08-26 12:49:32 +00:00

17 lines
503 B
C#

using System;
namespace LibationFileManager;
/// <summary>
/// An assembly the runtime could not bind to a usable file in Libation's install folder, with the version
/// the build was compiled against and the version actually on disk (null when the file is not there).
/// </summary>
public sealed record InstallAssemblyFailure(
string AssemblyName,
Version RequestedVersion,
Version? InstalledVersion,
string ExpectedPath)
{
public string FileName => System.IO.Path.GetFileName(ExpectedPath);
}