Как загрузить сборки в отдельные домены приложений с разными целевыми платформами? - PullRequest
3 голосов
/ 04 ноября 2011

Вот моя дилемма:

Проблема

  1. У меня есть подпрограмма (DLL), которая использует System.Data.SQLite, и оба скомпилированы в .NET 2.0
  2. Моя основная программа (EXE) скомпилирована в .NET 4.0
  3. Моя основная программа загружает подпрограмму в отдельный домен приложения и связывается с прокси

Очевидно, что MainProgram загружает подпрограмму и запускает ее с .NET 4.0. Это вызывает известную проблему с System.Data.SQLite .

Теперь я исследовал и попробовал все предложенные исправления для проблемы SQLite, и единственное, что сработало, было обновление до сборки System.Data.SQLite, скомпилированной с использованием .NET 4.0 (см. Версию .NET 4.0 в ссылка ).

Это решило бы мою проблему, только у нас есть строгий набор правил для выпуска и мы не выпускаем SubProgram или его зависимости каким-либо образом, поэтому DLL-библиотека System.Data.SQLite, которую использует SubProgram, должна оставаться текущей .NET 2.0 версия.

Вопрос (ы)

  1. Есть ли способ указать, что MainProgram загружает и запускает SubProgram, используя .NET 2.0? Может быть, что-то при настройке домена приложения? Пока ничего не могу найти.

  2. Есть ли другое решение?

1 Ответ

2 голосов
/ 05 ноября 2011

Единственный способ сделать это - использовать межпроцессное взаимодействие, а не кросс-домен.

Все домены приложений для данного приложения по-прежнему выполняются в одном и том же процессе, поэтому должны выполняться внутритот же корневой контекст CLR (и та же среда выполнения .NET).Но технология .NET Remoting, которая обычно обеспечивает прокси-связь и маршалинг через границы AppDomain, также применима с небольшими изменениями для межпроцессного взаимодействия.

Если вы измените подпрограмму как отдельный процесс и добавите канал удаленного взаимодействиямежду ними, это должно быть разумным способом продвижения вперед, учитывая ваши другие ограничения по выпуску.

...