类型在运行时变为未定义

时间:2013-11-19 20:15:08

标签: vb.net dll types reference runtime-error

我正在构建一个项目,使用名为NModbus的开源Modbus库来读取伺服驱动器参数。

我的VB.net项目包含对modbus.dll以及log4net.dll的引用。 enter image description here

我可以使用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命名空间内的类型未定义。

enter image description here

为什么在编码时定义了类型,我可以使用Intellisense来查找我的方法,但它们在运行时变得未定义?

2 个答案:

答案 0 :(得分:0)

可能是由于您引用的DLL的位置。由于它位于bin\Debug中,因此无论何时重新编译它都可能会被覆盖。当您将项目作为Release而不是Debug运行时,您是否会获得相同的行为?

答案 1 :(得分:0)

我将框架版本从4.0更改为3.5,我不再收到错误。这个dll是几年前编写的,我假设有一些东西在新的框架中无法正常运行。

编辑:从4.0客户端配置文件更改为任何常规框架也可以。该DLL引用了客户端配置文件没有的内容。有关VS2010中此错误的更多信息,请参阅顶部的链接。