Estoy usando la clase CSharpCodeProvider
para compilar un script C# que uso como DSL en mi aplicación. Cuando hay advertencias pero no hay errores, la propiedad Errors
de la instancia resultante CompilerResults
no contiene elementos. Pero cuando introduzco un error, las advertencias aparecen de repente en la propiedad Errors
también.CSharpCodeProvider no devuelve las advertencias del compilador cuando no hay errores
string script = @"
using System;
using System; // generate a warning
namespace MyNamespace
{
public class MyClass
{
public void MyMethod()
{
// uncomment the next statement to generate an error
//intx = 0;
}
}
}
";
CSharpCodeProvider provider = new CSharpCodeProvider(
new Dictionary<string, string>()
{
{ "CompilerVersion", "v4.0" }
});
CompilerParameters compilerParameters = new CompilerParameters();
compilerParameters.GenerateExecutable = false;
compilerParameters.GenerateInMemory = true;
CompilerResults results = provider.CompileAssemblyFromSource(
compilerParameters,
script);
foreach (CompilerError error in results.Errors)
{
Console.Write(error.IsWarning ? "Warning: " : "Error: ");
Console.WriteLine(error.ErrorText);
}
Entonces, ¿cómo puedo obtener las advertencias cuando no hay ningún error? Por cierto, no quiero establecer TreatWarningsAsErrors
en true
.
por cierto, ver http://stackoverflow.com/questions/2610886/is-it-possible-to-call-c-lexical-syntactic-analyzers-without-compilation/2611177#2611177 sobre 'GenerateInMemory' – abatishchev
@abatishchev gracias, eso es un hecho interesante. –