Я делаю игру, встроенную в 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.