CSharpCodeProvider не возвращает предупреждения компилятора, когда нет ошибок - PullRequest
6 голосов
/ 13 июня 2010

Я использую класс 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 ]

1 голос
/ 14 июня 2010

У меня все заработало, после того, как я исправил другие ошибки компиляции в вашем коде (символы комментария) и установил compilerParameters.WarningLevel.

1 голос
/ 13 июня 2010

Вы не установили CompilerParameters.WarningLevel

...