.Net 4.0のみを持つシステムで.Net 4.5に追加されたプロパティを設定しようとすると、MissingMemberException
(https://msdn.microsoft.com/en-us/library/system.missingmemberexception(v=vs.110).aspx)となります。ただし、リフレクションを使用する場合にのみこれをキャッチできます。それ以外の場合は、JIT例外が検出されません。 (Why is it not possible to catch MissingMethodException?)存在しない可能性のあるリフレクションを使用してプロパティを設定する
だから私はから私のコードを変更:
var p = client.GetType().GetProperty("DeliveryFormat");
if(p!=null)
p.SetValue(client, SmtpDeliveryFormat.International);
に
client.DeliveryFormat = SmtpDeliveryFormat.International;
この列挙のみも4.5で追加されましたので、しかし、今、私はSmtpDeliveryFormat
についての代わりに投げTypeLoadException
を取得します。
この2番目の問題を回避するにはどうすればよいですか?
var prop = client.GetType().GetProperty("DeliveryFormat");
if (prop != null) {
var enumType = typeof (SmtpClient).Assembly.GetType("System.Net.Mail.SmtpDeliveryFormat");
prop.SetValue(client, Enum.Parse(enumType, "International", null));
}
これはあなたのケースでは不足しているメソッドや型負荷例外をスローしないでください。
ちょうど不思議なことに、必要なフレームワークなしでシステム上で4.5アプリを実行することは可能ですか?古いバージョンからライブラリを動的にロードしているということですか? – Gusman
プロパティの値を設定する前にプロパティの存在を確認できないのはなぜですか? – thehennyy
また、TypeLoadExceptionは、ロードできないタイプを通知します。 – Gusman