我正在使用CodeDomProvider,CompilerInfo和CompilerParameters在运行时编译一些C#和VB代码.它工作得很好,我真的希望能够为我的应用程序添加脚本支持,但它似乎只支持.NET 2.0语法.例如,C#不支持var关键字,VB中不支持If(bool,string,string)表达式.
我怎么能告诉它以3.5框架为目标?
解决方法
好的,我在
Anders Norås发现了一个很大的提示,即CSharpCodeProvider构造函数的构造函数需要一些选项,包括编译器版本.当我检查
MSDN docs时,我发现在App.config文件中指定编译器选项更清晰.这是一个例子:
- <system.codedom>
- <compilers>
- <compiler
- language="vb;vbs;visualbasic;vbscript"
- extension=".vb"
- type="Microsoft.VisualBasic.VBCodeProvider,System,Version=2.0.3600.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"
- compilerOptions="/optimize"
- warningLevel="1" >
- <providerOption
- name="CompilerVersion"
- value="v3.5" />
- </compiler>
- <compiler
- language="c#;cs;csharp"
- extension=".cs"
- type="Microsoft.CSharp.CSharpCodeProvider,PublicKeyToken=b77a5c561934e089"
- compilerOptions="/optimize"
- warningLevel="1" >
- <providerOption
- name="CompilerVersion"
- value="v3.5" />
- </compiler>
- </compilers>
- </system.codedom>
我唯一的失望是现在我从CodeDomProvider.GetAllCompilerInfo()获得了每个编译器的两个版本.配置文档说App.config应该覆盖machine.config设置,但我得到了两者.到目前为止,App.config总是在machine.config之后,所以我只是让后面的那些覆盖了之前的那些.有谁知道如何避免重复?