gpt4 book ai didi

c# - 在 Debug模式下使用 [Conditional ("DEBUG")] 时引用程序集中的替代方法

转载 作者:行者123 更新时间:2023-11-30 18:37:40 25 4
gpt4 key购买 nike

我试图在程序集中创建一个方法,当调用程序集处于调试配置时,该方法的行为会有所不同。

具体来说,我有一个 Mailer 库,它使用模板来创建和发送电子邮件。因为我不想不小心用调试邮件向客户端发送垃圾邮件,所以我正在尝试制作我的 SendMail 方法的两个版本。

想法是在 Debug模式下 MailMessage.Recipients 将被清除,并且将使用默认邮件地址(即我们自己的内部邮件地址)。我希望这尽可能透明,而不需要在调用方进行额外的代码或配置。

问题是 Mailer 库被内置到 Nuget 包中,因此始终处于 Release 版本中。我想做这样的事情:

    [System.Diagnostics.Conditional("DEBUG")]
private void SetDebugMode(MailMessage mail)
{
mail.To.Clear();
mail.CC.Clear();
mail.Bcc.Clear();

mail.To.Add("support@example.com");
mail.Subject += " [DEBUG]";
}

public void SendMail()
{
SmtpClient smtp = new SmtpClient();
using (MailMessage mail = new MailMessage())
{
[...]
SetDebugMode(mail);
smtp.Send(mail);
}
}

这不起作用,因为调用方法是 Release 配置中的 SendMail 方法。

有没有一种方法可以使用相同的方法调用,使公共(public)接口(interface)保持不变,但仍能获得此功能?我想替代方案是使用可选的 isDebug = false 参数或配置设置或类似的东西,但我更愿意这样做而不必编辑此程序集之外的任何其他代码。

提前致谢。

最佳答案

你能不能:

#if DEBUG
Mail.Subject += " [Debug]";
#endif

等等?所以如果它的调试你有 1 个带有附加代码的函数

if (System.Diagnostics.Debugger.IsAttached) Mail.Subject += "[DEBUG]";

关于c# - 在 Debug模式下使用 [Conditional ("DEBUG")] 时引用程序集中的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12387378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com