使用带有.net 4.5 beta的CSharpCodeProvider
我最近安装了Visual Studio 11 Beta,我正在尝试更新现有的4.0项目以使用4.5。 在程序中,它使用CSharpCodeProvider
编译一些动态生成的代码。
/// /// Compile and return a reference to the compiled assembly /// private Assembly Compile() { var referencedDlls = new List { "mscorlib.dll", "System.dll", "System.Core.dll", }; referencedDlls.AddRange(RequiredReferences); var parameters = new CompilerParameters( assemblyNames: referencedDlls.ToArray(), outputName: GeneratedDllFileName, // only include debug information if we are currently debugging includeDebugInformation: Debugger.IsAttached); parameters.TreatWarningsAsErrors = false; parameters.WarningLevel = 0; parameters.GenerateExecutable = false; parameters.GenerateInMemory = false; parameters.CompilerOptions = "/optimize+ /platform:x64"; string[] files = Directory.GetFiles(GenerationDirectory, "*.cs"); var compiler = new CSharpCodeProvider( new Dictionary { { "CompilerVersion", "v4.5" } }); var results = compiler.CompileAssemblyFromFile(parameters, files); if (results.Errors.HasErrors) { string firstError = string.Format("Compile error: {0}", results.Errors[0].ToString()); throw new ApplicationException(firstError); } else { return results.CompiledAssembly; } }
当我将CompilerVersion
从{ "CompilerVersion", "v4.0" }
更改为{ "CompilerVersion", "v4.5" }
我现在得到一个例外
无法找到编译器可执行文件csc.exe。
指定CompilerVersion
是错误的方法告诉它使用4.5? 将其编译为v4.5甚至会产生影响,因为代码不会使用任何新的4.5特定function?
如果你给我们一个简短而完整的程序来certificate这个问题会有所帮助,但是我可以用“v4.0”来validation它是否可以工作并编译异步方法,假设你在VS11的机器上运行测试版安装。
示范:
上述就是C#学习教程:使用带有.net 4.5 beta的CSharpCodeProvider分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
using System; using System.Collections; using System.Reflection; using System.Collections.Generic; using System.Diagnostics; using Microsoft.CSharp; using System.CodeDom.Compiler; namespace Foo {} class Program { static void Main(string[] args) { var referencedDll = new List { "mscorlib.dll", "System.dll", "System.Core.dll", }; var parameters = new CompilerParameters( assemblyNames: referencedDll.ToArray(), outputName: "foo.dll", includeDebugInformation: false) { TreatWarningsAsErrors = true, // We don't want to be warned that we have no await! WarningLevel = 0, GenerateExecutable = false, GenerateInMemory = true }; var source = new[] { "class Test { static async void Foo() {}}" }; var options = new Dictionary { { "CompilerVersion", "v4.0" } }; var compiler = new CSharpCodeProvider(options); var results = compiler.CompileAssemblyFromSource(parameters, source); Console.WriteLine("Success? {0}", !results.Errors.HasErrors); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1043306.html