При попытке установить свойство, добавленное в .Net 4.5, в системе, которая имеет только .Net 4.0, вы получаете 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 также.
Как я могу обойти эту вторую проблему?
Любопытно, можно ли даже запустить приложение 4.5 на системе без необходимой структуры? или вы имеете в виду, что вы динамически загружаете библиотеки из более старых версий? – Gusman
Почему вы не можете проверить наличие свойства перед установкой его значения? – thehennyy
Кроме того, TypeLoadException сообщает, какой тип не может быть загружен? – Gusman