Как изменить путь загрузки ссылок в .NET? - PullRequest
1 голос
/ 30 апреля 2009

Я хочу такую ​​настройку:

+- /ApplicationFolder
  -- App.exe
  -- Core.dll
  -- AnotherShared.dll
  +- /PluginsFolder
    -- plugin1.dll
    -- plugin2.dll

Но поскольку plugin1.dll ссылается на Core.dll и Shared.dll, когда я компилирую приложение, он также сбрасывает копии «Copy.dll» и «Shared.dll» в папку плагинов, а если я их удаляю, больше не работает.

Как мне решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 30 апреля 2009

Когда вы создаете домен приложения, вы можете определить путь для загрузки сборок. Установите AppDomainSetup.PrivateBinPath и перейдите к домену AppDomain.Create.

Использование плагина AppDomain - хорошая идея для плагинов (допускается различный CAS и выгрузка).

Чтобы избежать копирования VS / msbuild ссылочных сборок в выходной каталог, измените «Копировать локальный» на false в свойствах ссылки.

1 голос
/ 19 апреля 2010

вы можете попробовать это: Как я могу установить PrivateBinPath в MEF?

или вы можете попробовать обработать событие Appdomain.AssemblyResolve, которое возникает в любое время .net не может найти сборку. там вы можете реализовать собственную логику для поиска и загрузки сборок из любого места.

обработчик событий AssemblyResolve jsut возвращает либо искомую сборку, либо null, поэтому вы можете вернуть уже загруженный файл Core.dll из списка доступных из метода AppDomain.GetAssemblies ().

однако в вашем случае будет нормально просто не включать Code.dll в plugin1.dll, .net уже должен понимать, что Core.dll загружен, и использовать этот экземпляр

1 голос
/ 30 апреля 2009

Мое приложение MEF настроено так, чтобы проекты плагинов компилировались в свою собственную папку (по умолчанию), затем я использую команду post-build для копирования определенных файлов в папку расширений вывода.

Другой способ - собрать проект непосредственно в соответствующую выходную папку и, как сказал другой автор, открыть панель «Свойства» для каждой соответствующей ссылки в вашем проекте плагина и установить для «Копировать локальный» значение false.

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