一个人免费观看视频www中文,女人与公狍交酡女免费,久久99精品久久久久久hb无码,免费人成视频网站在线观看18,亚洲热妇无码av在线播放,好姑娘高清影视在线观看,久久aaaa片一区二区,aaaaa级少妇高潮大片

綠色資源網:您身邊最放心的安全下載站! 最新軟件|熱門排行|軟件分類|軟件專題|廠商大全

綠色資源網

技術教程
您的位置:首頁網絡編程.Net編程 → .net 2.0 和 4.0不同的.net版本的條件編譯

.net 2.0 和 4.0不同的.net版本的條件編譯

我要評論 2012/11/28 13:15:36 來源:綠色資源網 編輯:www.dq05.cn [ ] 評論:0 點擊:348次

今天碰到這樣一個需求,寫的C#庫,有時候需要在.net 2.0下編譯,有時候需要在.net 4.0下編譯,這個庫里使用了lambda表達式,使用了擴展方法,使用了幾個 System.Core.dll 引入的Action類型。為了在 .net 2.0 下能夠編譯成功,我寫了一個文件 Patch.cs,定義了 System.Runtime.CompilerServices.ExtensionAttribute  類型,這樣就可以在2.0下使用lambda表達式和擴展方法了,同時,添加了幾個用到的System.Core.dll 引入的Action類型:

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

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

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

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

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

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

#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: {
13: public delegate void Action();
14: public delegate void Action<T0,T1>(T0 t0,T1 t1);
15: }
16:
17: #endif

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

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: {
12: public delegate void Action();
13: public delegate void Action<T0,T1>(T0 t0,T1 t1);
14: }
15:
16: #endif

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

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

關鍵詞:.net

閱讀本文后您有什么感想? 已有 人給出評價!

  • 0 歡迎喜歡
  • 0 白癡
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙視
主站蜘蛛池模板: 国产乱人伦av麻豆网| 成年日韩片av在线网站| 99热久久这里只有精品| 久久久噜噜噜www成人网| 成全看免费观看完整版| 乌克兰性欧美精品高清| 成人h动漫精品一区二区樱花动漫| 亚洲日韩av一区二区三区四区| a毛看片免费观看视频| 国语对白做受xxxxx在线| 天堂а√在线中文在线最新版 | 无码av无码天堂资源网| 丰满妇女强制高潮18xxxx| 亚洲色中文字幕无码av| 国产精品久久久久久影视不卡| 成年免费视频黄网站在线观看| 三级4级全黄| gogogo高清在线播放韩国| 亚洲欧洲无码av不卡在线| 女人被狂c躁到高潮视频 | 欧美老熟妇videos极品另类| 老子影院午夜精品无码| 婷婷涩涩五月天综合蜜桃| 人人妻人人狠人人爽| 高清免费卡一卡二新区| 国产chinese男男gay视频网| 亚洲自偷精品视频自拍| 粉嫩大学生无套内射无码卡视频| 亚洲成av人片在线观看天堂无| 久久天天躁狠狠躁夜夜av浪潮| 宝贝腿开大点我添添公视频免 | 3d动漫精品啪啪一区二区下载| 欧美va久久久噜噜噜久久| 河南妇女毛浓浓bw| 妇女bbbb插插插视频| 漂亮人妻洗澡被公强 日日躁| 久久亚洲私人国产精品| 亚洲精品国产成人| 丰满妇女强制高潮18xxxx| 国产无线乱码一区二三区| 欧美另类xx肥妇|