什么.NET Framework和C#版本应该与我的类库定位?
我正在构建一个DLL类库 – 我希望使尽可能多的人可以使用它.我应该使用哪个版本的.NET Framework和哪个C#版本?是否可以为不同版本生成向后兼容的DLL或不同的DLL?或者
Windows自动更新.NET框架,所以我应该使用最新版本?任何指导赞赏!
解决方法
我们针对某些产品并发定位了多个运行时版本(.NET 1.1,.NET 2.0和.NET 3.5).
我们以几种方式处理这个问题: >单独的解决方案和项目文件以及.NET 1.1,2.0和3.5 SP1中的每一个,但引用相同的源文件. 例如: ProductFoo_1_1.sln (.NET 1.1 solution,VS 2003) ProductFoo_2_0.sln (.NET 2.0 solution,VS 2008) ProductFoo_3_5.sln (.NET 3.5 solution,VS 2008) FooLibraryFooLibrary_1_1.csproj (.NET 1.1 Project,VS 2003) FooLibraryFooLibrary_2_0.csproj (.NET 2.0 Project,VS 2008) FooLibraryFooLibrary_3_5.csproj (.NET 3.5 Project,VS 2008) FooLibraryFooClass.cs (shared amongst all Projects) FooLibraryFooHelpers_1_1.cs (only referenced by the .NET 1.1 project) FooServiceFooService_3.5.csproj (.NET 3.5 Project,VS 2008) FooServiceFooService.cs >在每个解决方案中定义NET_X_X符号 public void SomeMethod(int param) { #ifdef NET_1_1 // Need to use Helper to Get Foo under .NET 1.1 Foo foo = Helper.GetFooByParam(param); #elseif NET_2_0 || NET_3_5 // .NET 2.0 and above can use preferred method. var foo = new Foo { Prop = param }; foo.LoadByParam(); #endif foo.Bar(); } #ifdef NET_3_5 // A method that is only available under .NET 3.5 public int[] GetWithFilter(Func Filter) { // some code here } #endif 为了澄清,以#开头的上述行是预处理器命令.编译解决方案时,C#编译器(csc)预处理源文件. 这是一种在某些条件下标记代码进行编译的方法 – 我们还使用它在更详细的调试版本中包含更多密集的调试信息,如下所示: #if DEBUG_VERBOSE Logging.Log("Web service Called with parameters: param = " + param); Logging.Log("Web service Response: " + response); Logging.Log("Current Cache Size (bytes): " + cache.TotalBytes); // etc. #endif >然后我们有NAnt脚本,可以自动为每个.NET版本生成一个版本. 它确实使事情变得更加复杂,所以我们只倾向于在需要维护遗留的.NET 1.1或2.0实例的地方(例如,客户不能/不会升级的地方). 我想象当.NET 4.0滚动时,我们将做同样的事情,只需添加一个NET_4_0符号. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |