Csharp/C#教程:条件编译取决于C#中的框架版本分享


条件编译取决于C#中的框架版本

是否有任何预处理器符号允许类似的东西

#if CLR_AT_LEAST_3.5 // use ReaderWriterLockSlim #else // use ReaderWriterLock #endif 

或其他一些方法来做到这一点?

我不认为有任何预定义的’预处理器’符号。 但是你可以像这样实现你想要的:

  1. 创建项目的不同配置,每个配置适用于您要支持的每个CLR版本。

  2. 每个CLR版本选择一个符号,如VERSION2VERSION3等。

  3. 在每个配置中,定义与其关联的一个符号,并取消定义所有其他符号。

  4. 在条件编译块中使用这些符号。

没有任何内置,但你可以提供自己的。

对于这个特定的场景,您可能希望将逻辑封装在(例如)包装器(锁)类中,这样您就不#if分散到所有代码中; 当然,如果你只是做一点锁定,那可能不值得麻烦。

我使用不同的配置和/或项目来构建各种平台 – 即使用此技巧为.NET 2.0,.NET 3.0,mono,CF 2.0,CF 3.5构建protobuf-net 。 代码具有基于不同符号的#if块来控制逻辑 – 因此,例如,CF上不提供BinaryFormatterWCF仅适用于.NET 3.0, Delegate.CreateDelegate不适用于CF 2.0等。

您可以使用reflection动态检查是否可以使用某些类型的ReaderWriterLockSlim(而不是使用预处理器)。

这将为您提供部署单个版本产品的优势,拥有(或更新).NET 3.5的用户将从优化代码中受益。

您可以使用/ define编译器开关手动设置此符号。 然后,为每个所需的clr版本创建不同的构建配置。

如果这就是你需要做的全部,我想你可以使用Environment.Version,但是就像divo的解决方案一样,它似乎在那里留下了许多不必要的代码。

上述就是C#学习教程:条件编译取决于C#中的框架版本分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1026904.html

(0)
皮卡丘图片皮卡丘图片
上一篇 2022年1月9日
下一篇 2022年1月9日

精彩推荐