Программа C#, запущенная на Mac, CSharpCodeProvider.CompileAssemblyFromSource получает ошибку "исходный файл не найден"

У меня есть приложение, написанное на C#, которое отлично работает на Mac, за исключением этой ошибки. Пишу и компилирую программу на Windows. Я использую кроссплатформенный фреймворк ETO, но я не уверен, связано ли это с этим.

Программа пишет код, компилирует и запускает его во время выполнения. Это нормально работает в Windows и Linux, но на Mac появляется сообщение об ошибке.

Вот соответствующий код:

string code = WriteCSharpClass(definition);

CompilerParameters compileParameters = new CompilerParameters();
compileParameters.GenerateInMemory = true;
compileParameters.GenerateExecutable = false;
compileParameters.TreatWarningsAsErrors = false;

CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerResults results = provider.CompileAssemblyFromSource(compileParameters, code);

if (results.Errors.HasErrors)
{
    foreach (CompilerError error in results.Errors)
    {
        Console.WriteLine(error.ErrorText);
    }
}

return results.CompiledAssembly;

Ошибка, которая регистрируется, выглядит примерно так:

"Исходный файл '/var/folders/vp/cqvw1kcn0v9fvmc580y1zws80000gn/T/n62z4p9u.0.cs' не может быть найден"

Мне кажется, что это ошибка разрешения. Я попытался вручную написать файл с таким же именем вот так:

File.Create(compileParameters.TempFiles.BasePath + ".0.cs");

Если я возвращаюсь и не запускаю компиляцию после записи этого файла вручную, я действительно вижу этот файл, записанный на диск. Если я позволю остальной части кода выполнить компиляцию во время выполнения, то файла нет на диске, я полагаю, потому чтоCSharpCodeProvider удаляет его после компиляции.

Я пользователь Windows и не очень разбираюсь в Mac, поэтому подозреваю, что это может быть простая вещь с разрешениями, которую я не понимаю, но тот факт, что я могу вручную записать файл с тем же именем файла, что и компилятор пытается написать, заставляет задуматься.

0 ответов

Другие вопросы по тегам