MikeTheFid Ответов: 1

Библиотеки DLL взаимодействия больше не создаются автоматически


Еще во времена VS2008 я создал очень большое решение на C#, которое включало в себя 12 проектов.

Когда я добавил ссылку на xyz.tlb в данный проект, VS2008 автоматически создал DLL interop.xyz.dll и все было замечательно. Все
using xyz;
заявления были прохладными

В наши дни, с vs2015, это уже не так.

Может ли кто - нибудь пролить свет на то, что я здесь упускаю?

Что я уже пробовал:

* Удаление и повторное добавление ссылки tlb.

* Поиск копии interop.xyz.dll, поместив его в общее место и добавив к нему ссылку. Что я ненавижу в этом, так это то, что если я обновлю продукт xyz и XYZ.tlb будет обновлен, мое решение не будет обновлено. Теоретически, по правилам COM он должен быть обратно совместим, но некоторые поставщики не всегда играли хорошо.

1 Ответов

Рейтинг:
0

Kornfeld Eliyahu Peter

Я не знаю, как это было в VS2008 и почему это изменилось,однако есть два способа справиться с COM DLL...
Как создать сборки взаимодействия из библиотек типов[^]
Как добавить ссылки на библиотеки типов[^]


MikeTheFid

Во-первых, спасибо за ваш ответ.

Это очень странно. (контекст: VS2015)

Если я делаю ссылку Add для xyz.tlb в проекте A (exe project), он добавляет ссылку и interop.xyz.dll создается в папке obj... и появляется ссылочное свойство "Embed Interop Types".

Повторяя точно такие же шаги для проекта B (lib project), он добавляет ссылку, но помечает ее как проблему в обозревателе решений (появляется наложение значков) и interop.xyz.dll не создается и не отображается ссылочное свойство "Embed Interop Types".

Kornfeld Eliyahu Peter

Это похоже на проблему с файлом tlb/lib...
Попробуйте построить взаимодействие вручную, используя tlbimp. Это может дать какой-то ключ...

MikeTheFid

Быстрое обновление из уважения к вашим усилиям помочь и всем, кто находится в этой теме.

Если добавление ссылки на xyz.tlb в проект A работает, а повторение процесса для проекта B в том же решении терпит неудачу, я склонен полагать, что содержание tlb не является проблемой.

Я решил воспользоваться обходным путем размещения interop.xyz.dll в"параметр obj\..." зафиксировано общее расположение и добавить ссылку на DLL вместо построителя транспортной загрузки. Не очень красиво, но я просто не могу больше тратить время на диагностику этой проблемы в настоящее время.

Кроме того, эта проблема приводит к следующим ошибкам IntelliSense:

* Ошибка CS0006: не удалось найти файл метаданных " <path>"
Где: & lt;path> - это библиотека DLL проекта, которая ссылается на библиотеку DLL взаимодействия

* Ошибка CS0246 не удалось найти тип или имя пространства имен "<namespace> " (отсутствует ли директива using или ссылка на сборку?)
Где: & lt;namespace> - Это XYZ (предполагается, что он поддерживается interop.xyz.dll)

Еще раз спасибо. Ваши ответы очень ценятся.

Kornfeld Eliyahu Peter

Библиотеки DLL, которые вы используете, - это некоторые распространенные, которые мы тоже можем протестировать, или самодельные?
Можете ли вы воссоздать ошибку с помощью любых двух библиотек DLL (например, Office)?