Sto utilizzando la classe CSharpCodeProvider
per compilare uno script C# che utilizzo come DSL nella mia applicazione. Quando ci sono avvertenze ma nessun errore, la proprietà Errors
dell'istanza CompilerResults
risultante non contiene elementi. Ma quando introduco un errore, gli avvisi vengono improvvisamente elencati nella proprietà Errors
.CSharpCodeProvider non restituisce gli avvisi del compilatore quando non ci sono errori
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);
}
Quindi, come ottenere gli avvisi quando non ci sono errori? A proposito, non voglio impostare TreatWarningsAsErrors
su true
.
btw, vedere http://stackoverflow.com/questions/2610886/is-it-possibile-al-call-c-lexical-syntactic-analyzers-without-compilation/2611177#2611177 su 'GenerateInMemory' – abatishchev
@abatishchev grazie, questo è un fatto interessante –