ОК, я обнаружил здесь большой намек от Андерс Норас , что есть конструктор для конструктора 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, System,
Version=2.0.3600.0, Culture=neutral,
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, поэтому я просто позволю более поздним переопределять предыдущие. Кто-нибудь знает, как избежать дублирования?