0

全て、

私は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;
    }
4

1 に答える 1