【问题标题】:Why am I getting error BC30456 when calling SmtpClient.Dispose?为什么调用 SmtpClient.Dispose 时出现错误 BC30456?
【发布时间】:2012-06-21 21:52:36
【问题描述】:

我在 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 吗?编译器设置可能在某处?

【问题讨论】:

    标签: vb.net idisposable


    【解决方案1】:

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

    为确保您使用的是版本 4:

    • 在 Visual Studio 中导航到项目的引用目录
    • 删除对 System.Net 的引用
    • 右键,添加引用
    • 在列表中找到该程序集,如下所示

    另外,请考虑重构您的代码以包含 Using 块。

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

    【讨论】:

    • 感谢您的快速响应。我的 UI 看起来和你的很不一样。我没有像您一样的参考文件夹(因为我正在处理网站而不是应用程序?)。但是,我在网站的属性页(dl.dropbox.com/u/55017434/Capture2.PNG)中找到了我的参考资料,你说得很对,它们都是 3.5。但是,更新后,我仍然遇到同样的错误。还有其他地方可以改变吗?
    • Grav:当你切换到Using 块时会发生什么?在这种情况下,您不必手动调用Dispose()。这将是在 v4 中是否正确编译的另一个线索。 (如果在 v3.5 中,则 obv 失败)。介意压缩你的项目(或精简版)供我下载和检查吗?
    • 使用“using”时,我得到基本相同的错误:错误 BC36010:“System.Net.Mail.SmtpClient”类型的“Using”操作数必须实现“System.IDisposable”。
    • 使用“使用”有什么好处吗?还是个人喜好?如果你不介意看一下,我会尽快拉上拉链。这个周末离开,所以不确定我会在电脑前多久,但会尽快尝试。我会尽量减少以缩小范围。我怀疑这是 VS 的错误...如果我启动一个新的控制台应用程序并将我的电子邮件代码复制到它,它编译时没有错误。再次感谢您。
    • 重力:没问题。如果你发在这里,我可以看看。
    【解决方案2】:

    我现在已经解决了这个问题。不太清楚到底是什么原因造成的,但对于遇到类似问题的其他人,我是这样解决的。

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 2014-06-07
      相关资源
      最近更新 更多