Я недавно установил бета-версию Visual Studio 11 и пытаюсь обновить существующий проект 4.0, чтобы использовать 4.5.В программе он компилирует некоторый динамически сгенерированный код, используя CSharpCodeProvider
.
/// <summary>
/// Compile and return a reference to the compiled assembly
/// </summary>
private Assembly Compile()
{
var referencedDlls = new List<string>
{
"mscorlib.dll",
"System.dll",
"System.Core.dll",
};
referencedDlls.AddRange(RequiredReferences);
var parameters = new CompilerParameters(
assemblyNames: referencedDlls.ToArray(),
outputName: GeneratedDllFileName,
// only include debug information if we are currently debugging
includeDebugInformation: Debugger.IsAttached);
parameters.TreatWarningsAsErrors = false;
parameters.WarningLevel = 0;
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = false;
parameters.CompilerOptions = "/optimize+ /platform:x64";
string[] files = Directory.GetFiles(GenerationDirectory, "*.cs");
var compiler = new CSharpCodeProvider(
new Dictionary<string, string> { { "CompilerVersion", "v4.5" } });
var results = compiler.CompileAssemblyFromFile(parameters, files);
if (results.Errors.HasErrors)
{
string firstError =
string.Format("Compile error: {0}", results.Errors[0].ToString());
throw new ApplicationException(firstError);
}
else
{
return results.CompiledAssembly;
}
}
Проблема возникает, когда я изменил CompilerVersion
с { "CompilerVersion", "v4.0" }
на { "CompilerVersion", "v4.5" }
Теперь я получаю исключение
Не удается найти исполняемый файл компилятора csc.exe.
Указывает CompilerVersion
неправильный способ указать ему использовать 4.5?Будет ли компиляция версии v4.5 даже иметь значение, так как код не будет использовать какие-либо новые специфические функции 4.5?