Автоматически встраивать сборки, на которые есть ссылки

Я нашел несколько действительно интересных статей о том, как встраивать сборки в одну основную DLL. Это необходимо, если вы хотите хранить свои библиотеки DLL в базе данных CRM. AppDomain.CurrentDomain.AssemblyResolve в динамике crm

Альтернативой является использование ILMerge, который меня не интересует.

В моем сценарии библиотеки DLL, которые я хочу встроить, взяты из одного решения. Уловка для встраивания сборок состоит в том, чтобы создать папку, добавить существующий элемент и выбрать библиотеки DLL, которые вы хотите использовать. Затем вы переходите к свойствам DLL и помечаете их как Embedded Resource.

Проблема в том, что указанные библиотеки DLL не будут обновлены до тех пор, пока я не создам решение. Итак, в настоящее время я создаю проект, копирую библиотеки DLL / bin в папку сборок проекта, а затем перестраиваю проект во второй раз.

Что еще хуже, у меня разные конфигурации решения: отладка, разработка, контроль качества, UAT и производство. Это изменяет каталог / bin, из которого я беру библиотеки DLL.

Итак, есть ли способ автоматически обновлять папку проекта при каждом построении проекта - и могу ли я изменить источник DLL в зависимости от текущей конфигурации решения?


person Travis Parks    schedule 25.04.2014    source источник
comment
Если щелкнуть правой кнопкой мыши любой проект и перейти к свойствам, можно создать собственные шаги сборки (например, копирование файлов) или изменить выходной каталог для любой конфигурации сборки. Вы также можете указать дополнительные папки для поиска зависимых библиотек.   -  person Egor    schedule 25.04.2014
comment
@Egor - я смог использовать этап предварительной сборки, чтобы xcopy библиотеки DLL из конкретных проектов $(OutDir) в папку со встроенными сборками. Доступ к папке $(OutDir) избавляет меня от создания отдельных сценариев развертывания. Спасибо!   -  person Travis Parks    schedule 25.04.2014


Ответы (1)


В течение нескольких месяцев я создавал решение, копируя библиотеки DLL в папку EmbeddedAssemblies, а затем перестраивая проект. Это было очень болезненно, потому что мне пришлось написать файл .bat, который вызывал бы MSBuild для моего всего .sln, затем выполнял XCOPY, а затем вызовите MSBuild для .csproj.

Хуже того, поскольку у меня нет контроля над тем, как TFS игнорирует файлы, система управления версиями постоянно считала эти файлы изменяющимися, и мне пришлось явно исключить их из проверок. Мои товарищи по команде обычно не были так внимательны.

Ultimate, я еще раз взглянул на ILMerge. Внутренне он делает то же самое, что и я. Я перешел на ILMerge и с тех пор чувствую себя намного счастливее.

person Travis Parks    schedule 11.09.2014