Компиляция во время выполнения с ссылочными сборками

Я создал функцию для компиляции кода C# в строку в памяти и использовать его во время выполнения. Это работает очень хорошо.

Затем я создал небольшую библиотеку классов (назовем ее mynew.dll) и поместил ее в папку c:\mylibraries\mynew.dll.

В моем коде я могу добавить ссылку на сборку. Я делаю это так:

CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters
{
    GenerateExecutable = false,
    GenerateInMemory = true
};

parameters.ReferencedAssemblies.Add(@"c:\mylibraries\mynew.dll");

CompilerResults results = provider.CompileAssemblyFromSource(parameters, mycode);

Теперь в моей кодовой строке C# (mycode) есть функция с именем "Execute". Когда я объявляю пространство имен и класс из mynew.dll в этой функции, я получаю эту ошибку:

Не удалось загрузить файл или сборку 'MyNew, Version=1.0.0.0, Culture= нейтральный, PublicKeyToken=null' или одну из ее зависимостей. Система не может найти указанный файл.

Когда я копирую dll в папку bin/debug основного приложения, оно внезапно работает, но я этого не хочу. Я хочу, чтобы код, скомпилированный во время выполнения, использовал его, а не основное приложение.

Это я сделал перед публикацией здесь:

  • Поиск Stackru
  • Используется Google
  • Пытался скомпилировать dll на диск, а не в память. Это работает... Проблема сейчас в том, что DLL-библиотека заблокирована в IIS, и я не могу удалить ее без перезапуска сервера IIS; нет варианта, так как код может измениться в любой момент, и я не хочу перезагружать сервер, когда люди находятся на сайте.

Есть ли способ это исправить?

1 ответ

Используйте Directory.GetFiles, чтобы найти свою сборку в файловой системе, используйте System.Reflection.Assembly.LoadFile, чтобы загрузить сборку, а затем найдите требуемые типы. Используйте интерфейс, который будет реализован вашими конкретными классами, чтобы избежать необходимости знать конкретные типы.

Этот поток должен помочь: Поиск объектов, которые реализуют интерфейс из загруженной сборки - как сравнить типы?

Другие вопросы по тегам