рабочая директория macOS неверна для содержимого - PullRequest
0 голосов
/ 27 марта 2020

Я делаю игру, встроенную в MonoGame (DesktopGL), используя. NET Framework 4.7.2. Игра построена на Windows и кросс-компилируется с использованием mkbundle с временем выполнения mono-5.18.0-osx-10.9-x64. Когда я запускаю игру из терминала (./MyGame), все работает нормально и проблем нет.

Проблема возникает, когда я дважды щелкаю, чтобы запустить игру в macOS. Рабочий каталог оказался не таким, как я ожидал, поскольку он находится в домашней папке (/Users/user) вместо папки, из которой запускается исполняемый файл. Я пробовал все, чтобы получить каталог. NET, включая AppDomain.CurrentDomain.BaseDirectory, и ничего не получалось до тех пор, пока я не использовал встроенную функцию proc_pidpath в libproc и не установил текущий каталог как самое первое в моем * Функция 1010 * в Program.cs.

Теперь игра действительно запускается, но не может загружать контент, потому что TitleContainer.Location использует AppDomain.CurrentDomain.BaseDirectory в качестве пути root, что указывает на домашнюю папку, и я хочу изменить его. Вот что я попробовал (обработка ошибок опущена):

int processID = System.Diagnostics.Process.GetCurrentProcess().Id;
string path = ProcPIDPath(processID);

//Get the directory since the executable name is in the path
path = System.IO.Path.GetDirectoryName(path);

Environment.CurrentDirectory = path;
AppDomain.CurrentDomain.SetupInformation.ApplicationBase = path;
System.IO.Directory.SetCurrentDirectory(path);

Так же, как система отсчета, все отлично работает на Windows и Linux.

...