一本一本久久a久久精品综合,啦啦啦视频免费播放在线观看,六十六十路熟妇高熟在线,老头解开奶罩吸奶头高潮视频,一本久久a久久免费精品不卡,顶级欧美熟妇高清xxxxx,爆乳熟妇一区二区三区霸乳,无码h黄肉3d动漫在线观看

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

綠色資源網(wǎng)

技術(shù)教程
您的位置:首頁(yè)網(wǎng)絡(luò)編程.Net編程 → .net 2.0 和 4.0不同的.net版本的條件編譯

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

我要評(píng)論 2012/11/28 13:15:36 來源:綠色資源網(wǎng) 編輯:www.nesang.cn [ ] 評(píng)論:0 點(diǎn)擊:348次

今天碰到這樣一個(gè)需求,寫的C#庫(kù),有時(shí)候需要在.net 2.0下編譯,有時(shí)候需要在.net 4.0下編譯,這個(gè)庫(kù)里使用了lambda表達(dá)式,使用了擴(kuò)展方法,使用了幾個(gè) System.Core.dll 引入的Action類型。為了在 .net 2.0 下能夠編譯成功,我寫了一個(gè)文件 Patch.cs,定義了 System.Runtime.CompilerServices.ExtensionAttribute  類型,這樣就可以在2.0下使用lambda表達(dá)式和擴(kuò)展方法了,同時(shí),添加了幾個(gè)用到的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 下編譯,因?yàn)轭愋鸵呀?jīng)存在,必須注釋掉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版本有關(guān)的指示符。怎么辦呢?自己動(dòng)手,豐衣足食,使用Build Events在編譯之前自動(dòng)偵測(cè)出項(xiàng)目所使用的.net版本,定義出我們想要的指示符。

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

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

#define NET2

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

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

第二步,打開需要條件編譯的項(xiàng)目,添加 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 宏語(yǔ)法。詳見 C#模板編程(2): 編寫C#預(yù)處理器,讓模板來的再自然一點(diǎn) 一文。點(diǎn)擊編譯,系統(tǒng)會(huì)生成一個(gè) 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: {
12: public delegate void Action();
13: public delegate void Action<T0,T1>(T0 t0,T1 t1);
14: }
15:
16: #endif

第四步,把生成的 Patch_Csmacro.cs 添加到項(xiàng)目中來。

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

關(guān)鍵詞:.net

閱讀本文后您有什么感想? 已有 人給出評(píng)價(jià)!

  • 0 歡迎喜歡
  • 0 白癡
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙視
主站蜘蛛池模板: 亚洲精品国产美女久久久99| 免费+国产+无码| 在线观看高清| 精品国产一区二区三区香蕉蜜臂 | 在教室伦流澡到高潮h麻豆| 成全动漫在线观看免费观看 | 免费无码精品黄av电影| 国产白袜男gaychina白袜男生| 欧类av怡春院| 中文亚洲av片在线观看不卡| 亚洲av成人一区二区三区av| videosgratis玩弄少妇| 国产超碰人人模人人爽人人喊| caoporn成人免费视频| 尤物tv在线进入| 国产最新美女视频| 久久爱电影网| videosgrais欧美另类| 狠狠爱无码一区二区三区| 国产午夜aaa片无码无片久久| 十九岁日本电影免费完整版观看 | 18禁无遮挡啪啪无码网站| 少妇暴力深喉囗交3p| а√最新版地址在线天堂| 亚洲 小说区 图片区 都市| 天天狠天天天天透在线| 亚洲人成网站免费播放| (无码视频)在线观看| 四虎永久在线精品免费视频| 无码任你躁久久久久久老妇| 亚洲国产综合av在线观看| japanese69极品少妇| 被夫の上司持久侵犯耻辱| 少妇被cao高潮呻吟声| 欧美老妇与禽交| 天美传媒mv免费观看完整| 国产成人无码一区二区在线播放 | 欧美激情乱人伦| 久久精品国产曰本波多野结衣| 亚洲精品理论电影在线观看 | 成年在线观看免费人视频|