Можно ли связать dlls вместе?

У меня есть проект библиотеки классов, который я сделал. Давайте назовем это ClassA. В ClassA я должен получить доступ к некоторым инструментам, которые находятся в dll (ToolsDLL.dll).

В ClassA я добавил ToolsDLL.dll к проекту и выбрал файл ToolsDLL.dll к каталогу Copy To Output ВСЕГДА. Так, чтобы библиотека создала и компиляции очень хорошо, и в выходном каталоге я вижу ClassA.dll наряду с ToolsDLL.dll

Затем, я хочу записать приложение, сказать App_A, который использует методы в ClassA. Так, в моем проекте App_A я добавил ссылку на ClassA.dll так, чтобы я мог получить доступ, это - пространство имен. Все хорошо и хорошо, это создает/компилирует.

Проблема состоит в том, как только я выполняю App_A, и это добирается до точки, где ToolsDLL.dll должен использоваться, это выдает исключение, "Не могущее Загрузить ToolsDLL.dll. Я не понимаю, как возможно, что это не может найти, что dll, потому что это находится в том же каталоге как ClassA.dll.

Я нашел, что, если я поместил ToolsDLL.dll в выходной каталог App_A, он работает просто великолепно. Есть ли какой-либо путь вокруг этого? Есть ли любой способ, которым ToolsDll.dll может быть так или иначе связан ClassA.dll. Причина состоит в том, что мои клиенты будут писать свои собственные приложения, подобные AppA, и было бы хорошо, если бы они только должны были сослаться на один файл в своем проекте и не нескольких.

7
задан PICyourBrain 5 January 2010 в 16:36
поделиться

4 ответа

[

] Есть утилита от Microsoft под названием [] [] ILMerge [] []. Скорее всего, он будет делать то, что вы хотите, объединяя несколько сборок в один файл.[

]. [

][]P.S.[]: Другим довольно часто используемым решением Вашей проблемы было бы добавление в решение/проект Вашего приложения события после сборки, которое копирует требуемую []ToolsDLL.dll[] в выходную директорию? Что-то вроде:[

]. [
xcopy /y /d $(SolutionDir)\lib\ToolsDLL.dll $(OutputDir)\ToolsDLL.dll
] [

](Извини, если я что-то не так понял, я печатаю это из своей памяти.) [

] [

] Конечно, вашему клиенту тоже придется это сделать. Но опять же, вероятно, они делали это и раньше. [

]
12
ответ дан 6 December 2019 в 19:37
поделиться

Добавили ли Вы DLL в проект, или Вы действительно добавили ссылку на нее? Вы должны сделать последнюю, тогда такие вещи будут сделаны автоматически для Вас. Похоже, что Вы добавили реальный файл в проектные файлы и настроили его на копирование.

Если Вы определенно хотите использовать подход с одним файлом, то примите предложения других ILMerge, очевидно...

.
1
ответ дан 6 December 2019 в 19:37
поделиться

Вы можете использовать ILMerge для объединения сборок в одну DLL.

https://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

0
ответ дан 6 December 2019 в 19:37
поделиться

Вы можете либо использовать инструмент слияния IL, либо установить ToolsDLL.dll в GAC.

Также, если вы посмотрите на вывод App_A, то ClassA.dll уже там, вот где она ищет ToolsDLL.dll.

0
ответ дан 6 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: