为什么在调用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
- 点击右键,添加引用
- 在列表中找到程序集,如下所示
另外,还要考虑重构你的代码有一个Using
块。
Using smtp As New SmtpClient()
smtp.Port = 25
'etc etc
End Using
答
我现在已经修复了这个问题。不太确定究竟是什么造成的,但对于遇到类似问题的其他人,我是这样解决的。
转到您的财产页面。 (右键点击项目 - >属性页面)(或只是Shift + F4)
在左侧框中选择“Build”。 (Image)
改变 “目标框架”,以” .NET Framework 3.5" 的
之后完成后,关闭项目/解决方案。
重新打开您的项目并重复此过程,这次选择“.NET Framework 4.0”。
关闭并重新打开项目,一旦完成。
我猜这将所有需要的引用重置为4.0。也许VS甚至缓存引用?这清除缓存?不知道,但它对我有用,如果你有同样的问题,这是值得一试。
感谢您的惊人快速反应。我的用户界面与您的界面非常不同。我没有像你这样的参考文件夹(因为我在网站而不是应用程序上工作?)。但是,我在网站的属性页中找到了我的参考(https://dl.dropbox.com/u/55017434/Capture2.PNG),并且您非常正确,它们都是3.5。但是,更新后,我仍然得到相同的错误。有没有其他地方可以改变? – Gravitate
Grav:当你切换到Using块时会发生什么?在这种情况下,你不必手动调用Dispose()。那是否是在v4中编译正确的另一个线索。 (如果在v3.5中obv失败)。记住你的项目(或精简版)以供我下载和检查? –
使用“使用”时,我得到基本相同的错误: 错误BC36010:'使用'类型'System.Net.Mail.SmtpClient'的操作数必须实现'System.IDisposable'。 – Gravitate