So überprüfen Sie den aufgelösten (bereitgestellten) AppData-Spezialordnerpfad für die Plattform „Windows Machine“ in MA
Posted: 07 Jan 2025, 12:24
Es gibt wahrscheinlich einen einfachen Trick dafür, aber ich weiß nur nicht, was das ist. Ich habe eine portable Klassenbibliothek, die .NET MAUI { Windows, Android, iOS }, aber auch WinForms und WPF unterstützt. Das Problem liegt in diesem Singleton, dessen Zweck darin besteht, den Einstellungsdatenbankpfad zu generieren:
Das offensichtliche Ziel besteht darin, ein Verzeichnis zu erstellen, das hinsichtlich Organisation und Anwendung spezifisch ist. Android erfüllt diese Anforderung beispielsweise standardmäßig, sodass _databasePath wie folgt gerendert wird:
Auf einer Windows-Plattform mit MAUI wird jedoch bei der Überprüfung des _databasePath-Werts Folgendes angezeigt:
... obwohl wir tatsächlich (mit etwas manueller Navigation) feststellen können, dass dies nicht wirklich der Fall ist. Der tatsächlich aufgelöste Pfad ist:
Warum es wichtig ist
In einem WinForms-Debug-Szenario ( (zum Beispiel) wird derselbe Code WIRKLICH hier eine Datei erstellen:
Wir sind uns wahrscheinlich alle einig, dass das schlecht wäre. Fazit: Wenn der effektive Pfad ermittelt werden kann, können wir Folgendes tun:
Wie erhalte ich also den „echten“ qualifizierten Pfad unter .NET MAUI Windows?
Code: Select all
protected virtual string DatabasePath
{
get
{
if (_databasePath is null)
{
var platformDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
Directory.CreateDirectory(platformDirectory);
_databasePath = Path.Combine(platformDirectory, "settings.db");
using (var cnx = new SQLiteConnection(DatabasePath))
{
cnx.CreateTable();
cnx.CreateTable();
}
Debug.WriteLine($"250106.A: {DatabasePath}");
bool openLocation = false;
{ } // [WINDOWS] As a debugging convenience, set openLocation to true to open directory in FileExplorer.
if (openLocation)
{
Process.Start(new ProcessStartInfo
{
UseShellExecute = true,
FileName = platformDirectory
});
}
}
return _databasePath;
}
}
string? _databasePath = null;
Code: Select all
/data/user/0/com.ivsoftware.demo.maui.onepage/files/settings.db
Code: Select all
C:\Users\tgreg\AppData\Local\settings.db
Code: Select all
C:\Users\tgreg\AppData\Local\Packages\com.ivsoftware.demo.maui.onepage_9zz4h110yvjzm\LocalCache\Local\settings.db
In einem WinForms-Debug-Szenario ( (zum Beispiel) wird derselbe Code WIRKLICH hier eine Datei erstellen:
Code: Select all
C:\Users\tgreg\AppData\Local\settings.db
Code: Select all
protected virtual string DatabasePath
{
get
{
if (_databasePath is null)
{
bool needQualify = ??? /* DETERMINED BY INSPECTING EFFECTIVE PATH. */;
var platformDirectory = needQualify
? Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"IVSoftware",
Assembly.GetEntryAssembly()?.GetName().Name ?? "Unknown")
: Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
Directory.CreateDirectory(platformDirectory);
.
.
.
}
}
}
string? _databasePath = null;