Использование двух DLL с одинаковым именем в одном проекте
Проблема в том, что мне нужно использовать две сторонние библиотеки DLL в качестве ссылки в одном проекте. Однако эти двое имеют одно и то же имя. Я нашел несколько тем с похожими проблемами, но ни один из них не решил мою проблему.
Чего я пытаюсь достичь:
У Siemens есть программный пакет под названием «TIA-portal», который используется для программирования ПЛК (контроллеров для промышленных приложений). Компания Siemens также предоставляет DLL, которую вы можете использовать в качестве ссылки в вашем .NET-проекте, которая позволяет вам использовать функции TIA-портала в вашем собственном приложении. Эта DLL обычно используется для автоматической генерации кода для TIA-портала.
Каждые пару лет компания Siemens выпускает новую версию портала TIA, новейшей из которых является версия 17. Я хочу, чтобы мое приложение работало как для версии 16, так и для версии 17. Итак, я планировал создать 2 идентичных пользовательских элемента управления. Единственная разница в том, на какую DLL они ссылаются.
Моя проблема:
DLL для обеих версий имеет одинаковое название: «Сименс.Инжиниринг».
Что я пробовал:
Я узнал из другого потока, что вы можете использовать 2 ссылки в одном проекте с тем же именем, используя свойство alias. Я дал двум ссылкам псевдонимы «TIAv16» и «TIAv17». (Мне пришлось переименовать имя файла DLL, чтобы добавить обе мои ссылки)
Когда я скомпилировал после этого, Visual Studio не выдала ошибок. Однако в окне вывода я вижу следующую ошибку:
warning MSB3243: No way to resolve conflict between "Siemens.Engineering, Version=17.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84" and "Siemens.Engineering, Version=16.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84". Choosing "Siemens.Engineering, Version=17.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84" arbitrarily.
Когда я смотрю в выходную папку, я замечаю, что там нет ни одной из двух DLL.
Я считаю, что проблема вызвана тем, что обе ссылки имеют одинаковый идентификатор: «Сименс.Инжиниринг».
Мои вопросы)
Итак, если я правильно понимаю свою проблему, есть 2 возможных решения.
1: Отредактируйте файлы DLL:
Есть ли способ отредактировать DLL таким образом, чтобы изменить свойство Identity? Я пробовал использовать программу под названием «Resource Hacker». Однако я не смог найти способ внести необходимые изменения.
2: Измените структуру программы:
Есть ли способ реструктурировать свое решение, чтобы полностью устранить проблему?
Раньше я пробовал создать в своем решении 2 отдельных проекта для каждого из моих пользовательских элементов управления. В каждом из этих проектов будет всего одна DLL.
В моем основном приложении я бы использовал эти 2 проекта в качестве справочника, чтобы я мог использовать их соответствующие пользовательские элементы управления. Проблема заключается в том, что, поскольку обе библиотеки DLL имеют одинаковое имя, в выходной папке появляется только одна из них.
Приветствуются любые решения или предложения.