调用SmtpClient.Dispose时为什么会出现错误BC30456?

时间:2012-06-21 21:52:36

标签: vb.net idisposable

我在Visual Studio 2012中遇到的确切错误是:

  

错误BC30456:' Dispose'不是System.Net.Mail.SmtpClient'。

的成员
    Dim SmtpServer As New SmtpClient()
    Dim mail As New MailMessage()
    SmtpServer.Port = 25
    SmtpServer.Host = MYHOST.com"
    mail = New MailMessage()
    mail.From = New MailAddress("MYADDRESS@DOMAIN.com")
    mail.To.Add("RECIPIENT@DOMAIN.com")
    mail.Subject = "Test Mail"
    mail.Body = "This is for testing SMTP mail"
    SmtpServer.Send(mail)
    SmtpServer.Dispose()

这应该是一个明显的错误。你会认为我使用.net framework 3.5或更低,因为Dispose()仅作为成员添加到.net 4.0中的SmtpClient。但是,我使用4.0!

在网站属性页面中,它指出4.0。还有其他我需要设置为4.0的地方吗?编译器设置可能在哪里?

2 个答案:

答案 0 :(得分:0)

正如您所观察到的,您确实使用的是System.Net.Mail.SmtpClient的3.5版本。

确保您使用的是版本4:

  • 导航到Visual Studio中项目的引用控制器
  • 删除对System.Net的引用
  • 右键单击,添加参考
  • 在列表中找到程序集,如下所示

enter image description here

enter image description here

另外,请考虑重构代码以获得Using阻止。

Using smtp As New SmtpClient()    
   smtp.Port = 25
   'etc etc
End Using

答案 1 :(得分:0)

我现在已经解决了这个问题。不太确定究竟是什么造成了它,但对于遇到类似问题的其他人来说,这就是我修复它的方法。

转到您的属性页面。 (右键单击项目 - > gt;属性页面)(或只是Shift + F4)

在左侧框中选择“构建”。 (Image

将“目标框架”更改为“.NET Framework 3.5”

完成后,关闭您的项目/解决方案。

重新打开您的项目并重复此过程,这次选择“.NET Framework 4.0”。

完成后关闭并重新打开项目。

我猜这会重置所有必需的4.0引用。也许VS甚至可以缓存引用?这会清除缓存吗?不确定,但它对我有用,如果你遇到同样的问题,值得一试。