2015-06-11 2 views
1

Я пишу C# Library-Project, который включает в себя другие библиотеки. Эти библиотеки должны храниться в подпапке «lib».Ссылка на dll-файлы из подпапки в проекте библиотеки

Скажем, мой проект называется mylib, а другие библиотеки называются extralib. Чем каталог выглядит следующим образом:

lib/extralib1.dll 
lib/extralib2.dll 
... 
mylib.dll 

теперь я написал C# -console-приложения: вызвать функцию из MyLib.dll, которая вызывает функцию из EXTRALIBS. Все отлично работает, когда я использую файл app.config, как это:

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

Но проблема в том, когда я использую MyLib.dll, например, в MatLab. Ссылки на экстралибы не работают. Единственная работа, когда я сохраняю их все в одной папке. И это то, чего я не хочу делать.

Итак, точка добавляет lib к закрытому пути в консольном приложении, это не очень хорошее решение! Я должен добавить дополнительные libs к частному пути внутри mylib.dll.

У вас есть идея, как это сделать? Или, может быть, есть лучший способ решить эту проблему?

+0

Я нашел эту функцию: 'AppDomain.CurrentDomain.SetupInformation.PrivateBinPath =" lib ";' Но я не хочу знать, какое fucntion вызывается сначала в mylib.dll, и я не хочу добавлять это в каждую функцию – morgelo

+0

Ваш конфигурационный файл просто не используется, CLR пытается найти matlab.exe.config. Написание файла конфигурации для программы, которая может использовать многие другие плагины, которые также нуждаются в том, чтобы возиться с этим конфигурационным файлом, является ... неразумным. Никто не заботится, что эти DLL-файлы находятся в одном каталоге, только вы. –

ответ

0

Вы можете использовать IL Merge для объединения всех сборок в один файл, если хотите.

->IL Merge

+0

Спасибо за ваш ответ. проект не так прост, как показано в вопросе, и я не хочу объединять библиотеки DLL – morgelo

0

Я думаю, вы путаете выполнения зондирования время разработки ссылки. Вы можете установить ссылки на любое место во время разработки. Но во время выполнения, возможно, оно должно быть в другом месте (например, GAC или тот же bin). Кроме того, некоторые приложения имеют очень специфический способ поиска зависимостей. И причина, по которой ваше исследование может не работать в MatLab, заключается в том, что у вас нет такого конфигурационного файла, который вы используете с консольным приложением.

Да, есть лучший способ сделать это. Вам нужно создать структуру проекта, с которой вы можете жить. Живое техническое обслуживание. Представьте свое дерево решений

____Solution 
    |____MyLibProject 
    |____MyConsoleProject 
    |____Bin 

Теперь, установите ваши проекты, чтобы вывести выход сборки в Solution-Bin. Поместите свои «экстралибы» в одно и то же место. - Ваша проблема решена. У вас есть милый пакет, который всегда будет работать.

Смежные вопросы