Чем PIA API отличается в Release и Debug build?

У меня есть ocx от третьей стороны, из которой создается Primary Interop Assembly (PIA), когда я добавляю элемент управления в мою форму. PIA предоставляет ActiveX API для моей сборки.NET.

Странная вещь, которую я обнаружил, заключается в том, что когда мое решение настроено на отладку, некоторые функции отсутствуют по сравнению с тем, когда мое решение установлено на выпуск. Метаданные PIA в папках Debug и Release отличаются

Выпуск:

#Region "Assembly AxInterop.DATARAYOCXLib, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null"
' C:\Users\...\Instruments\obj\x86\Release\AxInterop.DATARAYOCXLib.dll
#End Region

Imports System
Imports System.ComponentModel
Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Namespace AxDATARAYOCXLib
    <AxHost.Clsid("{43555bb9-3fe0-11d6-9f4a-00a0cc40a4d2}")> <DefaultEvent("SendMessage")> <DesignTimeVisible(True)>
    Public Class AxGetData
        Inherits AxHost

    Public Overridable Function IsDataReady(index As Short) As Boolean

Debug:

#Region "Assembly AxInterop.DATARAYOCXLib, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null"
' C:\Users\...\Instruments\obj\Debug\AxInterop.DATARAYOCXLib.dll
#End Region

Imports System
Imports System.ComponentModel
Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Namespace AxDATARAYOCXLib
    <AxHost.Clsid("{43555bb9-3fe0-11d6-9f4a-00a0cc40a4d2}")> <DefaultEvent("SendMessage")> <DesignTimeVisible(True)>
    Public Class AxGetData
        Inherits AxHost

    ' IsDataReady is missing

Как разные конфигурации могут работать с разными API? Недавно я обновил программное обеспечение сторонних производителей до последней версии (которая не включает IsDataReady) и удалил библиотеки DLL в папках отладки и выпуска и перестроил. DLL возвращаются, но Release все еще видит IsDataReady. Какой хороший способ решить это?

Я попробовал это...

  • Установить решение для выпуска
  • Удалены ссылки на PIA (AxInterop.DATARAYOCXLib.dll и Interop.DATARAYOCXLib.dll)
  • Открыл форму и добавил элементы управления на панель инструментов, найденную в ocx в Program Files. Это действие создает PIA (AFAIK) и добавляет ссылки.
  • Удаленные папки bin и obj
  • строить
  • Проверьте API. IsDataReady есть

Затем я повторил все шаги после установки решения для отладки. IsDataReady не существует.

Я связался с продавцом, и они сказали, что эта функция устарела и не включена в последнюю версию ocx. Однако я определенно вижу это при сборке в Release.

1 ответ

Я использовал Windows Search, чтобы удалить все bin а также obj каталог во всем моем каталоге решений и перестроен. Некоторое ручное построение для некоторых зависимых проектов более низкого уровня было необходимо. Это решило проблему. Теперь обе сборки Debug и Release показывают правильный API.

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

Я все еще не уверен, почему это было необходимо, или почему проект не будет перезаписывать сборку взаимодействия из последней версии ocx, даже если это была единственная версия, зарегистрированная на ПК. Я надеюсь, что мне не нужно делать это каждый раз, когда я получаю новую версию ocx, но я буду помнить об этом.

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