Использование двух 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 имеют одинаковое имя, в выходной папке появляется только одна из них.

Приветствуются любые решения или предложения.

0 ответов

Другие вопросы по тегам