Несколько проектов в одной dll

Проблема. Мы использовали инструмент регистрации подключаемых модулей CRM для обновления сборки, которая раньше работала нормально. Затем мы начали получать

Could not load file or assembly "Project 1 version ....Culture.. PublicKeyToken..."

Подробности. Сборочный проект, ссылающийся на другой проект в том же решении:

  • Проект 1 (библиотека классов – отсутствующий файл или сборка в приведенном выше сообщении)
  • Проект 2 (сборка, которую необходимо развернуть): ссылка на Проект 1

Изучив проблему, вызвавшую эту ошибку, сравнив рабочую сборку с новой сборкой, вызвавшей ошибку (используя инструмент dotPeek для просмотра содержимого dll), мы обнаружили разницу в том, как существовал проект 1. в обеих сборках.

  • Рабочая сборка: Проект 1 исходный код существовал в сборке как пространство имен (без dll) (выполнено старым разработчиком, который ушел)
  • Плохая/ошибочная сборка: проект 1 существовал как ссылка (dll-файл).

Вопрос. Как добиться того же поведения в моем коде/VS, что и в рабочей сборке?

Если это поможет: мы используем Dynamics CRM 2016 On-Premise, ILMerge, Visual Studio 2015.

Примечание.

  • Мы не можем перейти с базы данных на диск или GAC, так как там множество плагинов и шагов.

  • Мы развертываем сборки в CRM в: Без песочницы и базы данных


person myth    schedule 26.01.2018    source источник


Ответы (2)


Забудьте о старых вещах разработчиков. То, что вы делаете, идеально. Это моя рекомендация.

Забудьте о старых вещах разработчиков.

В инструменте регистрации плагинов отмените регистрацию этой старой сборки (где одна dll имеет как Project 1, так и 2 в одном пространстве имен)

То, что вы делаете, прекрасно.

Выполните Добавить ссылку библиотеки DLL проекта 1 в проект 2.
Выполните ILMERGE и зарегистрируйте эту новую сборку в PRT.
Больше ничего менять не нужно.

Возможно, вам придется следовать моему ответу, чтобы избежать повторной регистрации шагов.

person Arun Vinoth    schedule 27.01.2018

Вам нужно выполнить ILMERGE, чтобы объединить разные DLL, которые вам нужны, в одну и развернуть эту сборку в CRM.

Обычно мы настраиваем сценарий powershell для события после сборки, который объединяет все библиотеки DLL в одну сразу после их сборки.

person Elie-M    schedule 29.01.2018