我有一个用作 Visual Studio 扩展一部分的 C# 项目。
为了支持早期版本的 VS,项目设置为Target framework
.NET Framework 3.5。
该项目引用了System.ServiceModel
.
根据正在运行的 Visual Studio 版本,System.ServiceModel
将使用不同的版本。VS2008 将使用 .NET 3.5 版本的 DLL,而 VS2012 将在运行时使用 .NET 4.5 版本,与项目目标框架无关。
我的问题是在 .NET 4 中向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);
}
}
该解决方案有效,但我想知道是否有更好的设计模式来处理这个问题,而不需要反思。