知识大全 针对不同.NET版本的条件编译

Posted 版本

篇首语:书籍是横渡时间大海的航船。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 针对不同.NET版本的条件编译相关的知识,希望对你有一定的参考价值。

针对不同.NET版本的条件编译  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  为了在 NET 下能够编译成功 我写了一个文件 Patch cs 定义了System Runtime CompilerServices ExtensionAttribute 类型 这样就可以在 下使用lambda表达式和扩展方法了 同时 添加了几个用到的System Core dll引入的Action类型

  namespace System Runtime CompilerServices

  

  public class ExtensionAttribute : Attribute

  

  namespace System

  

  public delegate void Action()

  public delegate void Action<T T >(T t T t )

  

  然而 要在 NET 下编译 因为类型已经存在 必须注释掉Patch cs 很麻烦 于是想通过条件编译来解决 即

  #if NET

  namespace System Runtime CompilerServices

  

  public class ExtensionAttribute : Attribute

  

  namespace System

  

  public delegate void Action()

  public delegate void Action<T T >(T t T t )

  

  #endif

  问题是 net 里没有定义和 net版本有关的指示符 怎么办呢?自己动手 丰衣足食 使用Build Events在编译之前自动侦测出项目所使用的 net版本 定义出我们想要的指示符

  在 C#模板编程( ) 编写C#预处理器 让模板来的再自然一点一文中 写了一个程序 Csmacro exe 来实现C#下的模板机制 本文在Csmacro exe 的基础上 增加侦测项目所引用的 net 版本的功能

  原理 查找项目目录下的 csproj 文件 解析它 找到节点TargetFrameworkVersion 判断 net版本 然后生成一个Csmacro_Template cs文件 在里面 #define 版本指示符 例如 对 Net 项目 生成的 Csmacro_Template cs 文件内容为

  #define NET

  修改后Csmacro的代码可在 //github /xiaotie/GebCommon上下载(目前只处理了 net 和 如需要针对其它版本 可自行修改代码) 有了 Csmacro 一切就好办了

  第一步 把 Csmacro exe 放在Path路径下

  第二步 打开需要条件编译的项目 添加 Pre build 事件 Csmacro exe $(ProjectDir)

  第三步 编辑源文件 如 Patch cs 文件修改为

  #region include Csmacro_Template cs

  #endregion

  #if NET

  namespace System Runtime CompilerServices

  

  public class ExtensionAttribute : Attribute

  

  namespace System

  

  public delegate void Action()

  public delegate void Action<T T >(T t T t )

  

  #endif

  #region include 是我引入的 Csmacro 宏语法 详见 C#模板编程( ) 编写C#预处理器 让模板来的再自然一点 一文 点击编译 系统会生成一个 Patch_Csmacro cs 文件 内容如下

  #define NET

  #if NET

  namespace System Runtime CompilerServices

  

  public class ExtensionAttribute : Attribute

  

  namespace System

  

  public delegate void Action()

  public delegate void Action<T T >(T t T t )

  

  #endif

  第四步 把生成的 Patch_Csmacro cs 添加到项目中来

cha138/Article/program/net/201311/16137

相关参考

知识大全 详解.NET中的动态编译

详解.NET中的动态编译  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执行是一

知识大全 详解.NET中的动态编译技术

详解.NET中的动态编译技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执行

知识大全 详解.NET中的动态编译[1]

详解.NET中的动态编译[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译并执

知识大全 详解.NET中的动态编译技术[1]

详解.NET中的动态编译技术[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  代码的动态编译

知识大全 ASP.NET 2.0的编译模型

ASP.NET2.0的编译模型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  支持两种编译模型(

知识大全 详解.NET中的动态编译[3]

详解.NET中的动态编译[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!usingSystem

知识大全 详解.NET中的动态编译[5]

详解.NET中的动态编译[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于客户端的输入程

知识大全 详解.NET中的动态编译[2]

详解.NET中的动态编译[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  需要解释的是这里我

知识大全 详解.NET中的动态编译[4]

详解.NET中的动态编译[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  接下来在原来基础上

知识大全 浅析ASP.NET编译器

浅析ASP.NET编译器  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  要深入理解ASPNET动