Программа 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, поэтому подозреваю, что это может быть простая вещь с разрешениями, которую я не понимаю, но тот факт, что я могу вручную записать файл с тем же именем файла, что и компилятор пытается написать, заставляет задуматься.