Я нашел причину проблемы.
Microsoft.FSharp.Compiler.CodeDom.FSharpAspNetCodeProvider.FileExtension жестко закодировано в «fs».
Внутри System.CodeDom.Compiler.CodeDomCompilationConfiguration..ctor()
CompilerInfos создаются для каждого из разрешенных языков. CompilerInfo для FSharp не найден при создании этого.
internal CodeDomCompilationConfiguration()
{
this._compilerLanguages = new Hashtable(StringComparer.OrdinalIgnoreCase);
this._compilerExtensions = new Hashtable(StringComparer.OrdinalIgnoreCase);
this._allCompilerInfo = new ArrayList();
CompilerParameters compilerParams = new CompilerParameters();
compilerParams.WarningLevel = 4;
string codeDomProviderTypeName = "Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
CompilerInfo compilerInfo = new CompilerInfo(compilerParams, codeDomProviderTypeName);
compilerInfo._compilerLanguages = new string[] { "c#", "cs", "csharp" };
compilerInfo._compilerExtensions = new string[] { ".cs", "cs" };
compilerInfo._providerOptions = new Dictionary<string, string>();
compilerInfo._providerOptions["CompilerVersion"] = "v4.0";
this.AddCompilerInfo(compilerInfo);
compilerParams = new CompilerParameters();
compilerParams.WarningLevel = 4;
codeDomProviderTypeName = "Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
compilerInfo = new CompilerInfo(compilerParams, codeDomProviderTypeName);
compilerInfo._compilerLanguages = new string[] { "vb", "vbs", "visualbasic", "vbscript" };
compilerInfo._compilerExtensions = new string[] { ".vb", "vb" };
compilerInfo._providerOptions = new Dictionary<string, string>();
compilerInfo._providerOptions["CompilerVersion"] = "v4.0";
this.AddCompilerInfo(compilerInfo);
//Snip
}
FileExtension сравнивается с _compilerExtensions
в System.CodeDom.Compiler.CodeDomProvider.GetCompilerInfoForExtensionNoThrow
, который (в случае "fs") возвращает ноль в System.CodeDom.Compiler.CodeDomProvider.IsDefinedExtension
, который затем возвращает ложь в System.Web.Compilation.CompilationUtil.GetProviderOptions
, который возвращает нуль, вызвавший ArgumentNullException.
Спасибо, что указал мне правильное направление, @ Брайан