没有错误时,CSharpCodeProvider不会返回编译器警告

时间:2010-06-13 13:35:58

标签: c# .net compilation compiler-construction .net-4.0

我正在使用CSharpCodeProvider类编译一个C#脚本,我在我的应用程序中用作DSL。当存在警告但没有错误时,生成的Errors实例的CompilerResults属性不包含任何项。但是当我引入错误时,警告突然也会列在Errors属性中。

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

那么如果没有错误,我怎么能得到警告呢? 顺便说一句,我不想​​将TreatWarningsAsErrors设置为true

2 个答案:

答案 0 :(得分:1)

您未设置CompilerParameters.WarningLevel

答案 1 :(得分:1)

在我修复代码中的其他编译错误(注释字符)并设置compilerParameters.WarningLevel后,它对我来说很好。