C# Как получить путь к исполняемым файлам "Автономный" и "PublishSingleFile"?
У меня есть каталог, содержащий автономный exe и файл конфигурации. EXE должен прочитать этот файл конфигурации. Но проблема в том, что exe не может получить правильный путь к этому файлу конфигурации.
Позвольте мне сначала рассказать о том, как я это сделал.
1. Создайте проект NET5.0 в VS2019
2, добавить коды
using System;
using System.IO;
using System.Reflection;
namespace TestFile {
class Program {
static void Main(string[] args) {
string assemblyLocation = Assembly.GetEntryAssembly().Location;
Console.WriteLine($"assemblyLocation=\"{assemblyLocation}\"");
string configFile = Path.Combine((new FileInfo(assemblyLocation)).DirectoryName, "test.conf");
Console.WriteLine($"configFile=\"{configFile}\"");
File.ReadAllText(configFile);
}
}
}
3. Опубликуйте этот проект в автономном и PublishSingleFile exe.
4. Добавьте файл test.conf в каталог, в котором находится исполняемый файл.
5, запустите этот exe
Как я могу получить правильный путь к этому файлу конфигурации? пожалуйста помоги! Благодарю.
2 ответа
Взгляните на этот вопрос: как я могу заставить однофайловое приложение.NET Core 3 найти файл appsettings.json?
Автономные приложения.NET Core автоматически распаковываются во временную папку. Таким образом, путь к опубликованному исполняемому файлу отличается от пути к фактически выполненной сборке.
Вот так вы должны использовать это:
Path.GetDirectoryName(Process.GetCurrentProcess().MainModule)
Я прочитал, что рекомендуемый способ был
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
, однако для меня это вернуло значение null (.NET 6). Я подозреваю, что это потому, что код был в DLL из другого проекта. В любом случае, более надежный метод, по-видимому,
AppContext.BaseDirectory
. Он используется .NET для поиска зависимостей сборки и указывает на базовый каталог приложения. Довольно легко запомнить и сразу даст вам каталог, а не имя файла!