如题,把一套代码.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