代码之家  ›  专栏  ›  技术社区  ›  Vivek Nuna Chetan sabhaya

“SmtpPickuptDirAppender”不包含“SmtpHost”的定义,也没有可访问的扩展方法“SmtpHost”接受第一个参数

  •  0
  • Vivek Nuna Chetan sabhaya  · 技术社区  · 5 年前

    我在.net框架类库项目中有这段代码,我想在.net标准类库项目中重用它。它按预期工作,但在.net标准项目中出现编译错误。

    foreach (AppenderElement element in FX_CONNECT.EmailElement.Appenders)
    {
        var smtpElement = (log4net.Appender.SmtpPickupDirAppender)AppLogger.Logger.Repository.GetAppenders().Where(appender => appender.Name.Equals(element.Name)).FirstOrDefault();
        if (smtpElement != null)
        {
            smtpElement.From = FX_CONNECT.EmailElement.From;
            smtpElement.To = FX_CONNECT.EmailElement.To;
            smtpElement.SmtpHost = FX_CONNECT.EmailElement.Server;
        }
    }
    

    错误为 smtpElement.SmtpHost :

    错误CS1061“SmtpPickuptDirAppender”不包含的定义 “SmtpHost”和接受 找不到类型为“SmtpPickuptDirAppender”的第一个参数(您是 缺少使用指令或程序集引用?)

    这两个应用程序2.0.8中的log4net版本。

    我在网上搜索,但没有得到任何线索如何解决这个问题,请帮忙。

    我已经浏览了log4net官方网站,目前还不支持.net标准。

    https://logging.apache.org/log4net/release/framework-support.html

    那么,有什么解决方法吗?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Claudio Redi    5 年前

    我不明白你为什么说这个问题与.net标准有关。这个 documentation 属于 SmtpPickupDirAppender

    /// The configuration for this appender is identical to that of the <c>SMTPAppender</c>,
    /// except that instead of specifying the <c>SMTPAppender.SMTPHost</c> you specify 
    /// <see cref="PickupDir"/>.
    

    此附加器不适用于Smtp主机,但适用于文件系统目录。你需要设置 PickupDir 财产。

    更改 Smtp拾音器 通过 SmtpAppender 如果你想发送真实或替换的电子邮件

    smtpElement.SmtpHost = FX_CONNECT.EmailElement.Server;
    

    通过

    smtpElement.PickupDir = "C:\YourPickUpDir";
    

    如果你想继续使用那个appender。

        2
  •  0
  •   Vivek Nuna Chetan sabhaya    5 年前

    感谢@Claudio Redi的评论,这给了我解决问题的正确方向。

    我将以下类添加到我的项目中,并使用了 SMTPAppender 类代替 log4net.Appender.SmtpPickupDirAppender 在线 var smtpElement = (SMTPAppender)AppLogger.Logger.Repository.GetAppenders().Where(appender => appender.Name.Equals(element.Name)).FirstOrDefault(); 它正在按预期工作。

    using log4net.Appender;
    using log4net.Core;
    using System.IO;
    using System.Net.Mail;
    
    namespace FxCore.Diagnostics.Components
    {
        public class SMTPAppender : BufferingAppenderSkeleton
        {
            public string To { get; set; }
            public string From { get; set; }
            public string Subject { get; set; }
            public string SmtpHost { get; set; }
            public string Port { get; set; }
    
            protected void SendEmail(string messageBody)
            {
                SmtpClient client = new SmtpClient(SmtpHost);
                client.UseDefaultCredentials = false;
                client.Port = int.Parse(Port);
                using (MailMessage mailMessage = new MailMessage())
                {
                    mailMessage.From = new MailAddress(From);
                    mailMessage.To.Add(To);
                    mailMessage.Body = messageBody;
                    mailMessage.Subject = Subject;
                    client.Send(mailMessage);
                }
            }
    
            protected override bool RequiresLayout => true;
    
            protected override void SendBuffer(LoggingEvent[] events)
            {
                StringWriter writer = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
    
                string t = Layout.Header;
                if (t != null)
                {
                    writer.Write(t);
                }
    
                for (int i = 0; i < events.Length; i++)
                {
                    // Render the event and append the text to the buffer
                    RenderLoggingEvent(writer, events[i]);
                }
    
                t = Layout.Footer;
                if (t != null)
                {
                    writer.Write(t);
                }
    
                SendEmail(writer.ToString());
            }
        }
    }
    
    推荐文章