开发者

CSharpCodeProvider doesn't return compiler warnings when there are no errors

开发者 https://www.devze.com 2023-01-03 12:41 出处:网络
I\'m using the CSharpCodeProvider class to compile a C# script which I use as a DSL in my application. When there are warnings but no errors, the Errors property of the resulting CompilerResults insta

I'm using the CSharpCodeProvider class to compile a C# script which I use as a DSL in my application. When there are warnings but no errors, the Errors property of the resulting CompilerResults instance contains no items. But when I introduce an error, the warnings suddenly get listed in the Errors property as well.

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" }
    });

Compiler开发者_C百科Parameters 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);
}

So how to I get hold of the warnings when there are no errors? By the way, I don't want to set TreatWarningsAsErrors to true.


You didn't set CompilerParameters.WarningLevel


It worked fine for me, after I fixed the other compile errors in your code (The comment characters) and set compilerParameters.WarningLevel.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号