日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
針對不同.NET版本的條件編譯

為了在 .NET 2.0 下能夠編譯成功,我寫了一個文件 Patch.cs,定義了 System.Runtime.CompilerServices.ExtensionAttribute  類型,這樣就可以在2.0下使用lambda表達式和擴展方法了,同時,添加了幾個用到的System.Core.dll 引入的Action類型:

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供伊寧網(wǎng)站建設(shè)、伊寧做網(wǎng)站、伊寧網(wǎng)站設(shè)計、伊寧網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、伊寧企業(yè)網(wǎng)站模板建站服務(wù),10年伊寧做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

 
 
 
  1.  namespace System.Runtime.CompilerServices 
  2.  { 
  3.      public class ExtensionAttribute : Attribute { } 
  4.  } 
  5.  namespace System 
  6.  { 
  7.      public delegate void Action(); 
  8.      public delegate void Action(T0 t0,T1 t1); 

然而,要在.NET 4.0 下編譯,因為類型已經(jīng)存在,必須注釋掉Patch.cs,很麻煩。于是想通過條件編譯來解決,即:

 
 
 
  1. #if NET2 
  2.  namespace System.Runtime.CompilerServices 
  3.  { 
  4.      public class ExtensionAttribute : Attribute { } 
  5.  } 
  6.  namespace System 
  7.  { 
  8.     public delegate void Action(); 
  9.     public delegate void Action(T0 t0,T1 t1); 
  10. #endif 

問題是,.net 里沒有定義和.net版本有關(guān)的指示符。怎么辦呢?自己動手,豐衣足食,使用Build Events在編譯之前自動偵測出項目所使用的.net版本,定義出我們想要的指示符。

在 C#模板編程(2): 編寫C#預(yù)處理器,讓模板來的再自然一點一文中,寫了一個程序 Csmacro.exe 來實現(xiàn)C#下的模板機制,本文在Csmacro.exe 的基礎(chǔ)上,增加偵測項目所引用的.net 版本的功能。

原理:查找項目目錄下的 csproj 文件,解析它,找到節(jié)點TargetFrameworkVersion,判斷.net版本,然后生成一個Csmacro_Template.cs文件,在里面 #define 版本指示符。例如,對 .Net 2.0 項目,生成的 Csmacro_Template.cs 文件內(nèi)容為:

#define NET2

修改后Csmacro的代碼可在:https://github.com/xiaotie/GebCommon上下載(目前只處理了 .net 2.0 和 4.0,如需要針對其它版本,可自行修改代碼)。有了 Csmacro,一切就好辦了。

***步,把 Csmacro.exe 放在Path路徑下

第二步,打開需要條件編譯的項目,添加 Pre-build 事件:Csmacro.exe $(ProjectDir)

第三步,編輯源文件,如,Patch.cs 文件修改為:

 
 
 
  1.  #region include "Csmacro_Template.cs" 
  2.  #endregion 
  3.   
  4.  #if NET2 
  5.   
  6.  namespace System.Runtime.CompilerServices 
  7.  { 
  8.      public class ExtensionAttribute : Attribute { } 
  9.  } 
  10.  
  11. namespace System 
  12.     public delegate void Action(); 
  13.     public delegate void Action(T0 t0,T1 t1); 
  14.  
  15. #endif 

#region include 是我引入的 Csmacro 宏語法。詳見 C#模板編程(2): 編寫C#預(yù)處理器,讓模板來的再自然一點 一文。點擊編譯,系統(tǒng)會生成一個 Patch_Csmacro.cs 文件,內(nèi)容如下:

 
 
 
  1.  #define NET2 
  2.   
  3.  #if NET2 
  4.   
  5.  namespace System.Runtime.CompilerServices 
  6.  { 
  7.      public class ExtensionAttribute : Attribute { } 
  8.  } 
  9.   
  10. namespace System 
  11.     public delegate void Action(); 
  12.     public delegate void Action(T0 t0,T1 t1); 
  13.  #endif 

第四步,把生成的 Patch_Csmacro.cs 添加到項目中來。

搞定以后,選擇不同的target,編譯時產(chǎn)生的就是對該target的條件編譯!

原文鏈接:http://www.cnblogs.com/xiaotie/archive/2012/11/26/2789810.html


新聞名稱:針對不同.NET版本的條件編譯
網(wǎng)頁鏈接:http://www.5511xx.com/article/cdghpjo.html