0

我有一个用作 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);
 }
}

该解决方案有效,但我想知道是否有更好的设计模式来处理这个问题,而不需要反思。

4

1 回答 1

1

请参阅:在编译时检测目标框架版本

    public static void DisableDecompression(this HttpTransportBindingElement bindingElement)
    {
#if RUNNING_ON_4
        bindingElement.DecompressionEnabled = false;
#endif
    }

一旦构建设置为 .NET 3.5 发布,那么所有对的引用都DisableDecompression将被优化。

于 2013-07-31T16:01:59.733 回答