当尝试在仅具有.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?)
所以我改变了我的代码:
client.DeliveryFormat = SmtpDeliveryFormat.International;
到
var p = client.GetType().GetProperty("DeliveryFormat");
if(p!=null)
p.SetValue(client, SmtpDeliveryFormat.International);
但是现在我得到一个TypeLoadException
而不是SmtpDeliveryFormat
,因为此枚举仅在4.5中添加。
我如何解决第二个问题?
答案 0 :(得分:1)
一种选择是一直使用反射:
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));
}
在您的情况下,这不应该丢失丢失的方法或类型加载异常。