在C#中为.NET的多个版本更改对象属性
本文关键字:版本 对象 属性 中为 NET | 更新日期: 2023-09-27 18:25:37
我有一个C#项目,它被用作Visual Studio扩展的一部分。
为了支持VS的早期版本,该项目设置为Target framework
.NETFramework3.5。
该项目参考了System.ServiceModel
。
根据运行的Visual Studio版本,将使用不同版本的System.ServiceModel
。VS2008将使用.NET 3.5版本DLL,而VS2012将在运行时使用.NET 4.5版本,而与项目目标框架无关。
我的问题是在.NET4中向HttpTransportBindingElement添加了一个名为DecompressionEnabled的属性。因为我的目标是.NET 3.5,所以无法通过更改此属性进行编译;然而,我确实需要改变它的价值。
我在运行时用来更改属性的方法是使用反射:
public static void DisableDecompression(this HttpTransportBindingElement bindingElement)
{
var prop = bindingElement.GetType()
.GetProperty("DecompressionEnabled",
BindingFlags.Public | BindingFlags.Instance);
if (null != prop && prop.CanWrite)
{
prop.SetValue(bindingElement, false, null);
}
}
这个解决方案是可行的,但我想知道是否有一个更好的设计模式来处理这个问题,而不需要反思。
请参阅:在编译时检测目标框架版本
public static void DisableDecompression(this HttpTransportBindingElement bindingElement)
{
#if RUNNING_ON_4
bindingElement.DecompressionEnabled = false;
#endif
}
一旦该构建设置为.NET 3.5版本,那么对DisableDecompression
的所有引用都将被优化掉。