Включить указанную сборку без необходимости хранить приложение в том же каталоге, что и указанная сборка - PullRequest
2 голосов
/ 12 сентября 2011

Я использую HTMLAgilityPack с моим приложением C # winform. Я загрузил HTMLAgilityPack со своего жесткого диска, используя Visual Studio, в качестве ссылочной сборки. Затем я создаю свое приложение и копирую выходной исполняемый файл в новый каталог. Если HTMLAgilityPack находится не в том же каталоге, что и мой выходной исполняемый файл, возникает ошибка при попытке запустить мой исполняемый файл, говоря, что «ссылка не найдена». Есть ли какой-нибудь способ встроить ссылку в исполняемый файл, чтобы пользователям не приходилось носить с собой HTMLAgilityPack всякий раз, когда они хотят переместить файл?

С нетерпением жду ваших ответов,

Evan

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Да, вы можете сделать это, но это не совсем тривиально. Вы бы подписались на событие AppDomain.CurrentDomain.AssemblyResolve, и, когда оно поднялось, проверит , что он ищет пакет гибкости html (через аргументы события), а затем извлечет BLOB-сборку сборки из встроенного ресурса, используйте Assembly.Load(theBlob) и возвращает экземпляр Assembly.

Другим, более простым подходом может быть ilmerge.exe

Наконец, GAC избежал бы необходимости иметь файл локально ... но вместо этого требует его формальной установки централизованно. Если честно, я бы избегал GAC здесь.

1 голос
/ 12 сентября 2011

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

ILMerge.exe / t: winexe /out:test.exe test1.exe test2.dll

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