亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解針對不同.NET版本的條件編譯

發布時間:2021-10-29 16:45:43 來源:億速云 閱讀:171 作者:柒染 欄目:編程語言

本篇文章給大家分享的是有關如何理解針對不同.NET版本的條件編譯,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

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

 namespace System.Runtime.CompilerServices  {      public class ExtensionAttribute : Attribute { }  }  namespace System  {      public delegate void Action();      public delegate void Action<T0,T1>(T0 t0,T1 t1); }

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

#if NET2  namespace System.Runtime.CompilerServices  {      public class ExtensionAttribute : Attribute { }  }  namespace System  {     public delegate void Action();     public delegate void Action<T0,T1>(T0 t0,T1 t1); } #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 文件修改為:

 #region include "Csmacro_Template.cs"  #endregion    #if NET2    namespace System.Runtime.CompilerServices  {      public class ExtensionAttribute : Attribute { }  }  namespace System {     public delegate void Action();     public delegate void Action<T0,T1>(T0 t0,T1 t1); }  #endif

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

 #define NET2    #if NET2    namespace System.Runtime.CompilerServices  {      public class ExtensionAttribute : Attribute { }  }   namespace System {     public delegate void Action();     public delegate void Action<T0,T1>(T0 t0,T1 t1); }  #endif

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

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

以上就是如何理解針對不同.NET版本的條件編譯,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽阳市| 手机| 晋州市| 麻江县| 台中县| 城口县| 阳朔县| 金湖县| 额敏县| 东宁县| 象州县| 喀什市| 阜城县| 郸城县| 会理县| 志丹县| 噶尔县| 格尔木市| 南京市| 泗阳县| 泰宁县| 东山县| 淳安县| 永新县| 安图县| 桃园市| 耒阳市| 德州市| 涟水县| 疏附县| 桑植县| 石家庄市| 天水市| 贡觉县| 枣阳市| 大同市| 罗江县| 海伦市| 邵阳市| 长白| 营口市|