我正在构建一个项目,使用名为NModbus的开源Modbus库来读取伺服驱动器参数。
我的VB.net项目包含对modbus.dll以及log4net.dll的引用。
我可以使用intellisense调用命名空间modbus中的方法,并且不会出错。但是当我在IDE中运行这段代码时......
Imports System.IO.Ports
Imports Modbus
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim MyPort1 As New SerialPort("Com1")
MyPort1.BaudRate = 9600
MyPort1.DataBits = 8
MyPort1.Parity = Parity.None
MyPort1.StopBits = StopBits.One
MyPort1.Open()
Dim myMB As Device.ModbusSerialMaster
myMB = Device.ModbusSerialMaster.CreateAscii(MyPort1)
Dim slaveId As Byte = 1
Dim StartAddress As UShort = 100
Dim registers() As UShort
Dim NumberofRegisters As UShort = 5
registers = myMB.ReadHoldingRegisters(slaveId, StartAddress, NumberofRegisters)
End Sub
End Class
我收到错误,说明Modbus命名空间内的类型未定义。
为什么在编码时定义了类型,我可以使用Intellisense来查找我的方法,但它们在运行时变得未定义?
答案 0 :(得分:0)
可能是由于您引用的DLL的位置。由于它位于bin\Debug
中,因此无论何时重新编译它都可能会被覆盖。当您将项目作为Release而不是Debug运行时,您是否会获得相同的行为?
答案 1 :(得分:0)
我将框架版本从4.0更改为3.5,我不再收到错误。这个dll是几年前编写的,我假设有一些东西在新的框架中无法正常运行。
编辑:从4.0客户端配置文件更改为任何常规框架也可以。该DLL引用了客户端配置文件没有的内容。有关VS2010中此错误的更多信息,请参阅顶部的链接。