我检查了一些关于 roslyn 的资源,但我没有找到如何使用 Roslyn 将 c# 源代码编译为可执行文件.我可以轻松地使用 CodeDom 将一些.cs文件编译为.exe:
/// <summary>
/// "anycpu" || "anycpu32bitpreferred" || "x86" || "x64" || "ARM" || "Itanium"
/// </summary>
public static string param = "anycpu";
public static string BCS(string[] sources,string[] libs,string outPath,bool exef)
{
var options = new Dictionary<string, string> {
{ "CompilerVersion", "v4.0.0" }
};
CSharpCodeProvider codeProvider = new CSharpCodeProvider(options);
CompilerParameters parameters = new CompilerParameters(libs);
parameters.GenerateExecutable = exef;
parameters.OutputAssembly = outPath;
parameters.CompilerOptions = "-platform:" + param;
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sources);
if (results.Errors.Count > 0)
{
string errsText = "";
foreach (CompilerError CompErr in results.Errors)
{
errsText = "("+CompErr.ErrorNumber +
")Line " + CompErr.Line +
",Column "+CompErr.Column +
":"+CompErr.ErrorText + "" +
Environment.NewLine;
}
return errsText;
}
else
{
return "Success";
}
}
但是CodeDom的问题 - 他只能使用.NET Framework 4.0编译C#,但我需要使用4.6.1 .NET Framework版本编译C#文件。那么,问题:我可以使用Roslyn Compiler编译一些带有4.6.1 .NET Framework版本的c#文件(.cs)吗?
CodeDom 已被弃用,取而代之的是 Roslyn API。在.NET Framework(即.NET 4.x)上,您可以继续使用CSharpCodeProvider,该提供程序使用内置编译器,如果内存可用,该编译器最多支持C#6。如果要使用高于此版本的 C# 版本,则需要使用 Roslyn,并且有一个使用 Roslyn 的填充码 CodeProvider,可让您访问更高版本的 C# 版本。
下面是使用带有 CodeDom 的"经典"提供程序或 Roslyn 提供程序的外观:
if (CompilerMode == ScriptCompilerModes.Roslyn)
// NuGet Package: Microsoft.CodeDom.Providers.DotNetCompilerPlatform
_compiler = new Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider();
else
_compiler = new Microsoft.CSharp.CSharpCodeProvider(); // classic
最终,尽管 CodeProvider 接口已被弃用,但最好直接使用 Roslyn API。
在我的这篇文章中,有很多关于将旧CSharpCodeProvider
与 Roslyn 一起使用和使用 Roslyn API 的更多信息。