当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《条件编译取决于C#中的框架版本》经验,为你挑选了2个好方法。

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

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

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



1> Frederick Th..:

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

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

    选择像一个符号VERSION2,VERSION3每CLR版本等.

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

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



2> Marc Gravell..:

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

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

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

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有