全て、
私はasp.net Webサイトを持っており、binフォルダーには、動的にコンパイルされたコードが参照する必要なすべてのアセンブリがあります。CodeDomProvider を使用して実行時にコードをコンパイルします。
次の行で式をコンパイルすると
compiler.CompileAssemblyFromSource(expr);
エラーが表示されます:メタデータ ファイル 'NHibernate.dll' が見つかりませんでしたが、そのアセンブリは bin フォルダーにあります。
注:同一ではないにしても、Windowsアプリで機能する同様のコードがあります。
これが私のコードです:
CodeDomProvider compiler = _GetCompiler();
CompilerParameters compilerParams = _GetCompilerParams();
CompilerResults results = compiler.CompileAssemblyFromSource(compilerParams, expr);
if (results.Errors.Count > 0)
throw new InvalidOperationException("Failed to compile criteria expression for the following reason: " + _GetAllCompilerErrors(results.Errors));
private CodeDomProvider _GetCompiler()
{
Dictionary<string, string> providerOptions = new Dictionary<string, string>();
providerOptions.Add("CompilerVersion", "v2.0");
CodeDomProvider compiler = new CSharpCodeProvider(providerOptions);
return compiler;
}
private CompilerParameters _GetCompilerParams()
{
CompilerParameters compilerParams = new CompilerParameters();
compilerParams.GenerateInMemory = true;
compilerParams.GenerateExecutable = false;
compilerParams.ReferencedAssemblies.AddRange(new string[] {
"System.dll",
"NHibernate.dll",
});
return compilerParams;
}