0

全部,

我有 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;
    }
4

1 回答 1

1

我也遇到了同样的问题,只需通过在路径中显式添加 bin 文件夹来解决它

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

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

它现在将在 bin 目录中查找“NHibernate.dll”,这对我来说同样有效

我希望它也对你有用

于 2013-07-10T09:40:57.553 回答