好的,我从AndersNorås那里得到了一个很大的提示,即CSharpCodeProvider构造函数的构造函数需要一些选项,包括编译器版本.当我检查MSDN文档时,我发现在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, System,
Version=2.0.3600.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
compilerOptions="/optimize"
warningLevel="1" >
<providerOption
name="CompilerVersion"
value="v3.5" />
</compiler>
</compilers>
</system.codedom>
Run Code Online (Sandbox Code Playgroud)
我唯一的失望是现在我从CodeDomProvider.GetAllCompilerInfo()获得了每个编译器的两个版本.配置文档说App.config应该覆盖machine.config设置,但我得到了两者.到目前为止,App.config总是在machine.config之后,所以我只是让后面的那些覆盖了之前的那些.有谁知道如何避免重复?
不确定你在app.config的位置,但是你怎么能告诉它使用3.5框架.
var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
Run Code Online (Sandbox Code Playgroud)
http://blogs.msdn.com/lukeh/archive/2007/07/11/c-3-0-and-codedom.aspx