【发布时间】:2022-01-05 01:19:21
【问题描述】:
因此,以下代码用于在 .NET 4 中获取 System.Net.Mail.MailMessage 对象作为 MemoryStream,但是随着 .NET 4.5 beta 的发布,会发生运行时异常。
Assembly assembly = typeof(SmtpClient).Assembly;
Type mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");
using (MemoryStream stream = new MemoryStream())
{
ConstructorInfo mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null);
object mailWriter = mailWriterContructor.Invoke(new object[] { stream });
MethodInfo sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic);
sendMethod.Invoke(message, BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { mailWriter, true }, null);
.....
}
在 sendMethod.Invoke() 上发生运行时异常。
【问题讨论】:
-
有什么异常(堆栈跟踪可能有帮助)?
-
异常是这样的:System.Reflection.TargetParameterCountException:参数计数不匹配。
-
您是否将 .NET 4 代码与 .NET 4.5 进行了比较,看看它们是否丢弃了
Send的重载?这当然可以通过使用dynamic更简单地处理。 -
请看下面我的回答,他们在 Send 方法中添加了一个额外的布尔参数(allowUnicode)。