我正在使用visual studio 2010并尝试创建一个类库,然后我在一个应用程序中使用它,该应用程序将使用TaskFactory创建任务并从新创建的类库中执行类函数。但是我在应用程序中得到了实例未定义的错误。
CLASS LIBRARY:
装配名称:GPStream
根命名空间:TFStream
具有不同课程的项目:
GPStream:
gStream.vb,
parserT.vb,
insertDB.vb
Imports System.Data.SqlClient
Imports System.IO
Imports System.Text
Imports System.ComponentModel
Imports System.Net.Mail
Imports System.Threading
Imports System.Threading.Tasks
Public Class gStream
Private Shared settings As New System.Configuration.AppSettingsReader
' application configuration variables'
Public Sub New()
getConfigurations()
End Sub
...
End Class
Imports System.IO
Imports System.Web
Imports TFStream
Imports System.Configuration
Imports System.Threading
Imports System.Threading.Tasks
Public Class Form1
Private gp1 As TFStream.GPStream.gStream = New TFStream.GPStream.gStream()
...
End Class
我确实已将其添加为参考。
类库:程序集名称GPStream,根名称空间GPStream 项目名称GPStream,Main Class gStream
答案 0 :(得分:3)
好的,我会想到一个更简单的样本,我希望它可以帮助你实现目标。
我们有一个商业实体项目,我们想在WinForm项目中使用它。然后我们有两个项目,比如说在同一个解决方案中,为了简单起见。
我们将把它当作这些程序集文件包含相同的程序集名称和默认名称空间。
我的WinFormApp项目的命名空间是:MyCompany.MyProject.WinFormApp
并且:MyCompany.MyProject.BusinessEntities
用于类库。让我们从包含以下两个类的类库开始:
在会计核算中,这两个用于不同的观点,即Account Receivable
为客户,Account Payable
为供应商。可以指定适当的命名空间来反映这一现实。
Customer类看起来像这样:
Imports MyCompany.MyProject.BusinessEntities
Namespace AccountReceivable
Public Class Customer
Private _id As Integer
Private _name As String
Private _phoneNumber As Long
Private _creditTerm As CreditTerm
Public Sub New()
Term = CreditTerm.None
End Sub
Public Sub New(ByVal pId As Integer _
, ByVal pName As String _
, ByVal pPhoneNumber As Long)
_id = pId
Name = pName
PhoneNumber = pPhoneNumber
Term = CreditTerm.None
End Sub
Public ReadOnly Property Id As Integer
Get
Return _id
End Get
End Property
Public Property Name As String
Get
Return _name
End Get
Set(ByVal value As String)
If (String.IsNullOrWhiteSpace(value)) Then _
Throw New ArgumentNullException("Name")
_name = value
End Set
End Property
Public Property PhoneNumber As Long
Get
Return _phoneNumber
End Get
Set(ByVal value As Long)
_phoneNumber = value
End Set
End Property
Public Property Term As CreditTerm
Get
Return _term
End Get
Set(ByVal value As CreditTerm)
_term = value
End Set
End Property
End Class
End Namespace
然后,供应商类:
Imports MyCompany.MyProject.BusinessEntities ' Used for the CreditTerm Enum Property'
Namespace AccountPayable
Public Class Supplier
' We will here consider having the same properties as Customer for simplicity.'
End Class
End Namespace
此处的CreditTerms枚举可以分配给我们购买的供应商和我们销售的客户。从这个角度来看,这个类可能是你项目的根源,也可能是它的共同用途。
Public Enum CreditTerm
None
N30
N45
N60
N90
End Enum
然后,我们的WinFormApp项目看起来应该类似于:
Imports System
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports MyCompany.MyProject.BusinessEntities 'Indeed you have to add the reference...'
Imports MyCompany.MyProject.BusinessEntities.AccountReceivable
Public Partial Class Form1
Inherits Form
Private _netTerm As CreditTerm = CreditTerm.None
Private _customer As Customer = New Customer()
Private _supplier As AccountPayable.Supplier = New AccountPayable.Supplier()
...
End Class
请注意,我已明确导入MyCompany.MyProject.BusinessEntities
和MyCompany.MyProject.BusinessEntities.AccountReceivable
,以便明确CreditTerm
枚举与Customer
类之间的命名空间差异。因此,我没有导入Supplier
类'命名空间,这迫使我指向找到类的位置。
最后,我可以使用MyCompany.MyProject.BusinessEntities.Customer
命名空间来对客户命名空间内的Customer类进行分组,同时将客户置于同一名称空间下。但是,即使在导入命名空间时,您也必须编写以下内容:
Private _customer As Customer.Customer = New Customer.Customer()
写作时会想到另一件事。尝试构建/生成/重新生成类库,然后将其添加为引用。也许您引用类库的项目无法找到二进制文件,除非您通过项目引用引用它。
请随意询问有关误解细节的任何问题,或者甚至说我自己也可能误解了您的问题和疑虑。
我真的希望这会有所帮助!
答案 1 :(得分:2)
最后一个Imports
语句是否有效?如果是,则表示GPStream.gstream
是名称空间,而不是类。您的类可能有不同的名称或嵌套在该命名空间内(您尝试过GPStream.gstream.gstream
吗?)。