Quindi, il codice seguente utilizzato per funzionare in. NET 4 per ottenere un oggetto System.Net.Mail.MailMessage come MemoryStream, tuttavia con la versione di .NET 4.5 beta si verifica un'eccezione di runtime.Ottenere System.Net.Mail.MailMessage come MemoryStream in .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);
.....
}
eccezione di runtime si verifica su sendMethod.Invoke().
Qual è l'eccezione (stack trace può aiutare)? –
Eccezione: System.Reflection.TargetParameterCountException: mancata corrispondenza del conteggio dei parametri. – dimoss
Hai confrontato il codice .NET 4 in .NET 4.5 per vedere se hanno eliminato un sovraccarico di "Invia"? Questo potrebbe certamente essere gestito più semplicemente con l'uso di 'dinamico'. –