在动态编译代码时,CodeDomProvider无法解析网站Bin文件夹中的程序集

时间:2013-06-20 18:42:16

标签: c# asp.net codedom

所有

我有asp.net网站,在我的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;
    }

1 个答案:

答案 0 :(得分:1)

我也有同样的问题,只需通过明确添加来解决它  路径中的bin文件夹

而不是“NHibernate.dll”使用如下:

Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)+ "\\NHibernate.dll")

它现在将在bin目录中查找“NHibernate.dll”同样适用于我

我希望它也适合你