为什么在调用SmtpClient.Dispose时收到错误BC30456?

问题描述:

我在Visual Studio 2012得到确切的错误是:为什么在调用SmtpClient.Dispose时收到错误BC30456?

error BC30456: 'Dispose' is not a member of '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("[email protected]") 
    mail.To.Add("[email protected]") 
    mail.Subject = "Test Mail" 
    mail.Body = "This is for testing SMTP mail" 
    SmtpServer.Send(mail) 
    SmtpServer.Dispose() 

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

在网站属性页面中,它声明4.0。有什么地方我需要设置为4.0?编译器设置可能在某处?

正如您所看到的,您的确在使用3.5版本的System.Net.Mail.SmtpClient。

为了确保您使用的是版本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 
+0

感谢您的惊人快速反应。我的用户界面与您的界面非常不同。我没有像你这样的参考文件夹(因为我在网站而不是应用程序上工作?)。但是,我在网站的属性页中找到了我的参考(https://dl.dropbox.com/u/55017434/Capture2.PNG),并且您非常正确,它们都是3.5。但是,更新后,我仍然得到相同的错误。有没有其他地方可以改变? – Gravitate

+0

Grav:当你切换到Using块时会发生什么?在这种情况下,你不必手动调用Dispose()。那是否是在v4中编译正确的另一个线索。 (如果在v3.5中obv失败)。记住你的项目(或精简版)以供我下载和检查? –

+0

使用“使用”时,我得到基本相同的错误: 错误BC36010:'使用'类型'System.Net.Mail.SmtpClient'的操作数必须实现'System.IDisposable'。 – Gravitate

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

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

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

改变 “目标框架”,以” .NET Framework 3.5" 的

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

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

关闭并重新打开项目,一旦完成。

我猜这将所有需要的引用重置为4.0。也许VS甚至缓存引用?这清除缓存?不知道,但它对我有用,如果你有同样的问题,这是值得一试。