Могу ли я загрузить сборку, не зная имя файла DLL, где я знаю только имя пространства имен - PullRequest
1 голос
/ 27 октября 2011

Мне интересно, можно ли загрузить сборку в домен приложений, используя только строку пространства имен, например System.Data.Odbc (без остатка от полного имени сборки)

Я также не могу загрузить сборку, используя путь к DLL, мне нужен .NET, чтобы решить эту проблему для меня.

Справка:

У меня есть компилятор сценариев C #, работающий в другом AppDomain, эти сценарии могут содержать ссылки, такие как: System.Data.Odbc.OdbcConnection conn, и мне нужно загрузить типы ссылок на сценарии.

Я анализирую System.Data.Odbc.OdbcConnection и загружаю System.Data.Odbc. Я ожидаю, что загрузка System.Data.Odbc.OdbcConnection не удастся, и мой код учитывает это, но мне нужно знать, возможно ли загрузить сборку ТОЛЬКО с использованием строки System.Data.Odbc

Я рассмотрел этот вопрос:

Можно ли загрузить сборку .NET во время выполнения и создать экземпляр типа, зная только имя?

Однако это не помогает мне, так как предполагает знание имени файла dll.

Можно с уверенностью предположить, что библиотеки расположены в GAC или в базовом каталоге приложения.

1 Ответ

4 голосов
/ 27 октября 2011

Как правило, это невозможно.Не существует внутренней связи между DLL и пространством имен.Несколько DLL могут содержать одно и то же пространство имен, а одна DLL может содержать несколько разных корневых пространств имен.Таким образом, здесь не гарантируется отображение 1-1.

Однако вы можете создать таблицу в своем приложении между данным пространством имен и набором DLL, которые его содержат.Затем для пространства имен попробуйте загрузить все эти DLL по порядку.Это приблизит вас к эффекту, который вы ищете (но только для ограниченного набора доступных DLL)

...