我有一个来自第三方的 ocx,当我向表单添加控件时,会从中创建主互操作程序集 (PIA)。PIA 向我的 .NET 程序集公开了一个 ActiveX API。
我发现奇怪的是,当我的解决方案设置为 Debug 时,与我的解决方案设置为 Release 时相比,缺少一些功能。Debug 和 Release 文件夹中 PIA 的元数据不同
发布:
#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
调试:
#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)
- 打开一个表单并将控件添加到 Program Files 的 ocx 中的工具箱中。此操作创建 PIA (AFAIK) 并添加引用。
- 删除 bin 和 obj 文件夹
- 建造
- 检查 API。IsDataReady 在那里
然后我在将解决方案设置为调试后重复了所有步骤。IsDataReady 不存在。
我联系了供应商,他们说此功能已弃用,并且不包含在最新的 ocx 中。但是,在 Release 中构建时我肯定会看到它。