CodeDomProvider не смог разрешить мои сборки в папке Bin веб-сайта при динамической компиляции кода

Все,

У меня есть веб-сайт 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;
    }

person ActiveX    schedule 20.06.2013    source источник


Ответы (1)


У меня также была такая же проблема, просто решите ее, явно добавив папку bin в путь

вместо "NHibernate.dll" используйте, как показано ниже:

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

теперь он будет искать «NHibernate.dll» в каталоге bin, то же самое сработало для меня

я надеюсь, что это сработает и для вас

person Atul Rai    schedule 10.07.2013