Instalé recientemente el Visual Studio 11 Beta, y estoy tratando de actualizar un proyecto 4.0 existente para usar 4.5. En el programa, compila código generado dinámicamente usando CSharpCodeProvider
.Usando CSharpCodeProvider con .net 4.5 beta
/// <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;
}
}
El problema viene cuando he cambiado el CompilerVersion
{ "CompilerVersion", "v4.0" }
-{ "CompilerVersion", "v4.5" }
Ahora recibe una excepción
Compilador csc.exe archivo ejecutable no se puede encontrar.
¿Está especificando CompilerVersion
la forma incorrecta de indicarle que use 4.5? ¿Compilarlo como v4.5 incluso marcará la diferencia ya que el código no usará ninguna nueva característica específica de 4.5?
No sé si está mal para especificar la versión del compilador así, pero el compilador Fwiw en .NET 4.5 sigue siendo la versión 4.0 de acuerdo con la salida. –
¿Por qué solo devuelve el primer error? – abatishchev
@abatishchev Dado que el código que estoy compilando está autogenerado, normalmente no debería haber ningún error a menos que la plantilla esté en mal estado, solo devolver el primero evita que devuelva posiblemente miles de errores, lo que resultaría en un error muy largo correo electrónico y realmente no ser más útil – BrandonAGr