Ссылка COM «XyzLib» — это сборка взаимодействия для элемента управления ActiveX «AxXyzLib», но компилятор пометил ее как связанную с флагом /link.

Я ссылаюсь на элемент управления OCX, написанный на C++, предназначенный для собственного кода x86 из DLL .NET 3.5 C#. Я получаю это некритическое сообщение об ошибке. Ищем как от этого избавиться. Я искал в Интернете, но ссылки, которые я нашел до сих пор, не помогли.

Справочник COM "SIGPLUSlib" — это сборка взаимодействия для элемента управления ActiveX "AxSIGPLUSlib", но компилятор пометил его как связанный с помощью флага /link. Эта ссылка COM будет рассматриваться как ссылка и не будет связана.

Я просмотрел свойства обеих ссылок SigPlusLib и AxSigPlusLib, но я не вижу ни одного места, где бы какая-либо из них была отмечена как связанная с флагом /link. .

Ссылки, которые я смотрел, безрезультатно

ссылка1

link2

link3 Предлагается установить встроить interop в false, но я не нашел эту опцию в свойствах для SigPlusLib или AxSigPlusLib.введите здесь описание изображения


person JonN    schedule 12.02.2020    source источник
comment
Все веб-сообщения, ссылающиеся на эту ошибку, ссылаются на эту опцию Embed Interop Type, которая предположительно находится в свойствах для ссылки, но я не вижу такой опции. См. Правую панель изображения, которое я разместил выше в исходном вопросе.   -  person JonN    schedule 12.02.2020
comment
@HansPassant Хорошо, тогда я чего-то не понимаю. На изображении, которое я разместил, правая панель называется Interop.SIGPLUSLib Reference Properties. Я отобразил его, щелкнув правой кнопкой мыши InteropReference в разделе «Ссылки» в окне обозревателя решений и выбрав «Свойства». Я получаю похожее окно, если выбираю ссылку AxInterop.SIGPLLUSlib. Если я перехожу в меню просмотра, там есть пункт меню «Страницы свойств», который отключен, и пункт меню «Диспетчер свойств», который вызывает пустое окно с сообщением «Нет загруженного проекта Visual C++». Свойства для какого объекта мы говорим?   -  person JonN    schedule 13.02.2020
comment
О, это там. Не привык к расположению окна. Почему свойство Embed Interop Types отсутствует в этом окне, очень трудно догадаться. Учитывая необычность диагностики, я могу только догадываться, что IDE сама поняла, что встраивание невозможно, поэтому скрыла эту опцию. Дёргаем коврик для msbuild. Используйте Справка › Отправить отзыв › Сообщить о проблеме, в идеале вы должны предоставить библиотеку типов, чтобы увидеть, что с ней не так. Любые предупреждения, которые вы увидите при использовании aximp.exe для создания библиотек взаимодействия, также будут иметь большое значение.   -  person Hans Passant    schedule 13.02.2020


Ответы (2)


Загадка того, почему опция Embed Interop Types была недоступна в окне справочных свойств, очевидно, связана с созданием DLL с такой старой версией (3.5) .NET. Я обновил C# DLL для использования .NET 4.7.2, и параметр Внедрить типы взаимодействия был доступен и показал, что в SigPlusLib для этого параметра установлено значение TRUE. Как только я установил значение FALSE, сообщение об ошибке исчезло. Оболочки взаимодействия были автоматически сгенерированы, когда я добавил элемент управления в свою форму, а во втором «SigPlusLib» параметр Embed был установлен по умолчанию, когда он был автоматически сгенерирован Visual Studio.

person JonN    schedule 14.02.2020

Это происходит, когда вы используете OCX непосредственно из C# или VB.NET, как вы это делаете.

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

Например, Microsoft предлагает PIA для Office.
Основные сборки взаимодействия Office

Однако поставщики OCX не всегда предоставляют PIA.
Обратитесь к своему поставщику OCX.

Кроме того, вы можете использовать tlbimp.exe для создания собственного PIA, даже если поставщик его не предоставляет.
Однако это не рекомендуется, так как он будет переработан, когда функции поставщика улучшатся или будут исправлены ошибки.

Если вы или ваша компания являетесь поставщиком OCX, создание и предоставление PIA будет правильным решением.

См. следующее.
Основные сборки взаимодействия
Создание основных сборок взаимодействия
Создание основных сборок взаимодействия
Tlbimp.exe (импортер библиотеки типов)
Программирование с использованием основных сборок взаимодействия< /а>

Взаимодействие с неуправляемым кодом
Предоставление COM-компонентов для .NET Framework


Или вы не можете проверить имя или тип, но после .NET 4 ссылка на ocx не требуется при использовании динамического типа.
Как новый динамический тип C# может упростить доступ к COM-объекту с поздней привязкой

person kunif    schedule 12.02.2020
comment
Я создатель элемента управления OCX. - person JonN; 13.02.2020
comment
Если это так, создание и предоставление PIA для пользователей .NET может быть хорошей услугой. - person kunif; 13.02.2020