创建类库

时间:2011-03-28 15:22:07

标签: vb.net visual-studio-2010 class-library

我正在使用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

2 个答案:

答案 0 :(得分:3)

好的,我会想到一个更简单的样本,我希望它可以帮助你实现目标。

我们有一个商业实体项目,我们想在WinForm项目中使用它。然后我们有两个项目,比如说在同一个解决方案中,为了简单起见。

  1. WinFormApp(MyCompany.MyProject.WinFormApp.exe);
  2. BusinessEntities(MyCompany.MyProject.BusinessEntities.dll)。
  3.   

    我们将把它当作这些程序集文件包含相同的程序集名称和默认名称空间。

    我的WinFormApp项目的命名空间是:MyCompany.MyProject.WinFormApp
    并且:MyCompany.MyProject.BusinessEntities用于类库。让我们从包含以下两个类的类库开始:

    1. 客户;
    2. 供应商;
    3. CreditTerms。
    4. 在会计核算中,这两个用于不同的观点,即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.BusinessEntitiesMyCompany.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吗?)。