如題,把一套代碼.NET代碼。編譯成多平臺,多版本dll文件、git
項目結構如圖(Cvs文件讀寫開源組件 https://github.com/JoshClose/CsvHelper)github
如上圖。項目工程 CsvHelper 是類庫的主項目工程。學習
CsvHelper20,CsvHelper35,CsvHelperPcl 是不一樣.NET版本對應的項目工程、測試
類庫項目工程、CsvHelper20,CsvHelper35,CsvHelperPcl 使用的是 CvsHelper 的代碼文件(直接經過添加 項目連接文件+條件編譯符號 實現的)。spa
下面本身動手來操做一遍咯。感受被我說得雲裏糊塗的。o(︶︿︶)o ~3d
第一步(0x01),建立項目工程:code
新建5個項目工程、以下圖、blog
OceanHo.Common (工程代碼都寫在這個項目裏面,.NET版本 4.0)get
OceanHo.CommonNET20 (OceanHo.Common針對.NET2.0的版本,.NET版本 2.0)源碼
OceanHo.CommonNET20 (OceanHo.Common針對.NET4.0的版本,.NET版本 4.0)
OceanHo.Common.ExampleDo(測試項目的代碼都寫在這裏,.NET版本 4.0,須要引用OceanHo.Common)
OceanHo.Common.ExampleDoNET20(測試項目的代碼都寫在這裏,.NET版本 2.0,須要引用OceanHo.CommonNET20)
OceanHo.Common.ExampleDoNET40(測試項目的代碼都寫在這裏,.NET版本 4.0,須要引用OceanHo.CommonNET40)
第二步(0x02),添加 條件編譯符號:
設置項目 OceanHo.CommonNET20 的 條件編譯符號爲 NET20,OceanHo.CommonNET40 條件編譯符號 設置爲 NET40
注:net20 與 net40 自定義,非必須叫這個名稱哈、設置完成後,以下圖。
第三步(0x03),新建CSharp源碼文件:
在OceanHo.Common添加ObjectExtension.cs並加上如圖所示的代碼(不急哈,代碼最後面會丟到github上的)
第四步(0x04),添加源代碼文件連接:
在 OceanHo.CommonNET20,OceanHo.CommonNET40 兩個項目中添加 OceanHo.Common 的
Properties\AssemblyInfo.cs
ObjectExtension.cs
兩個文件的連接引用,操做(選中 OceanHo.CommonNET20 ,鼠標右鍵 -》 添加 -》 現有項 )
操做完成後,將看到以下圖所示。
哦,對鳥、~~~ OceanHo.CommonNET40項目也同上方法進行操做。o(∩_∩)o ~
第五步(0x05),讓.NET 2.0 支持靜態方法擴展:
在 OceanHo.CommonNET20 中添加 ExtensionAttribute.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 5 /****** Care here namespace *************/ 6 namespace System.Runtime.CompilerServices 7 { 8 /// <summary> 9 /// 爲 .NET 2.0 定義一個擴展方法的支持標記類,在不引用升級 .NET 到 3.5 與引用.NET 3.5 程序集的狀況下能夠支持靜態方法擴展 10 /// </summary> 11 [AttributeUsage( AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method )] 12 public sealed class ExtensionAttribute : Attribute 13 { 14 } 15 }
第六步(0x06),寫個控制檯測試程序看看效果:
第七步(0x07),瞧瞧添加 文件連接 OceanHo.CommonNET20.csproj的東東:
能夠看到,實際上,添加的 連接 代碼文件,是在 Compile 節點下加了一個 Link 節點連接到這個項目中的咯~
代碼爲方便本身繼續學習,已經放到 github 上咯。
https://github.com/oceanho/OceanHo.MultiVerCompileTests