Установить путь ссылки сборки - PullRequest
2 голосов
/ 13 августа 2011

Я создал приложение на C # с такой структурой:

SystemPath
- MainApplication.EXE
- API.dll
- Модули
------- Module1.dll
------- Module2.dll

MainApplication.exe имеет ссылку на сборку API.dll. И он использует сборки Module1 и Module2 с помощью «Assembly.Load (dllFile)». Для файлов Module1.dll и Module2.dll также необходим файл API.dll.

Итак, им нужен API.dll по тому же пути, и мне нужно поместить файл API.dll в обе директории (SystemPath и Modules).

То, что я хочу, - это способ сообщить модулям, что файл API.dll находится в этой папке, когда я загружаю его с Assembly.Load.

Я не могу использовать глобальный кэш сборок и не могу изменить эту структуру.

Что я могу сделать, чтобы решить эту проблему?

Ответы [ 2 ]

4 голосов
/ 13 августа 2011

В вашем файле MainApplication.exe.config вы можете добавить элемент , который задает список подкаталогов, разделенных точкой с запятой, которые будут искать при загрузке сборки. Например:

<?xml version="1.0"?>
<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath="Modules" />
        </assemblyBinding>
    </runtime>
</configuration>

Имея это в вашей конфигурации, вы сможете сделать Assembly.Load или ссылку на Module1; и поскольку корень вашего приложения все еще находится на верхнем уровне, если Module1 выполняет Assembly.Load или ссылку на API.dll, он автоматически получит его из каталога верхнего уровня.

0 голосов
/ 13 августа 2011

Вы уверены, что API.dll должен находиться в той же папке, что и Module1 / 2.dll?API.dll из основного приложения уже загружен, когда вы загружаете модули программно.Просто убедитесь, что они были скомпилированы с той же версией API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...