CodeDomProvider.CreateCompiler() 已经过时。

14
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler MyCompiler = codeProvider.CreateCompiler();
CompilerParameters myParameters = new CompilerParameters();
myParameters.GenerateExecutable = true;
myParameters.OutputAssembly = @"prog.exe";
myParameters.TreatWarningsAsErrors = false;
CompilerResults results = myCompiler.CompileAssemblyFromFile(myParameters,"prog.txt");

我该如何编写这段代码以消除这个警告:

System.CodeDom.Compiler.CodeDomProvider.CreateCompiler()已过时:'调用者不应使用ICodeCompiler接口,而应直接使用CodeDomProvider类上的方法。那些继承自CodeDomProvider的类仍然必须实现此接口,并应将此方法排除在外或将其标记为过时。'

2个回答

10

使用这个方法代替:

CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

扩展:

if (CodeDomProvider.IsDefinedLanguage(language))
{
    CodeDomProvider provider = CodeDomProvider.CreateProvider(language);
    // ...
}
else
    Console.WriteLine("ERROR");

3
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerParameters myParameters = new CompilerParameters();
myParameters.GenerateExecutable = true;
myParameters.OutputAssembly = @"prog.exe";
myParameters.TreatWarningsAsErrors = false;
CompilerResults results = codeProvider.CompileAssemblyFromFile(myParameters, "prog.txt");

@eddie_cat 移除 codeProvider.CreateCompiler() 代码,直接使用 codeProvider.CompileAssemblyFromFile 进行编译。 - Nikolay Kostov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接