Чем 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, но я буду помнить об этом.