したがって、以下のコードは.NET 4でSystem.Net.Mail.MailMessageオブジェクトをMemoryStreamとして取得するために使用されていましたが、 .NET 4.5ベータ版では実行時例外が発生します。System.Net.Mail.MailMessageを.NET 4.5ベータ版のMemoryStreamとして取得
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:パラメーターの数が一致しません。 – dimoss
.NET 4のコードを.NET 4.5と比較して、それらが 'Send'のオーバーロードを落としたかどうかを確認しましたか?これは、「ダイナミック」を使用することで、より簡単に処理できます。 –