J'utilise la classe CSharpCodeProvider
pour compiler un script C# que j'utilise comme DSL dans mon application. Lorsqu'il y a des avertissements mais pas d'erreurs, la propriété Errors
de l'instance CompilerResults
résultante ne contient aucun élément. Mais quand j'introduis une erreur, les avertissements apparaissent soudainement dans la propriété Errors
.CSharpCodeProvider ne retourne pas les avertissements du compilateur lorsqu'il n'y a pas d'erreurs
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);
}
Alors, comment obtenir les avertissements en l'absence d'erreurs? Par ailleurs, je ne veux pas mettre TreatWarningsAsErrors
à true
.
btw, voir http://stackoverflow.com/questions/2610886/is-it-possible-pour-call-c-lexical-syntactic-analyzers-without-compilation/2611177#2611177 about 'GenerateInMemory' – abatishchev
@abatishchev merci, c'est un fait intéressant. –