.net低版本调用高版本

前段时间在做项目转换时(以前是2008中创建,现在转成2010),遇到一个问题。下面简单叙述:

项目A(目标框架是3.5,里面用WPF创建了一些窗体)

项目B(目标框架是2.0,调用了项目A中的类)

在VS2008中,在项目B中添加项目A的引用时,没有问题,可以添加成功。但转成VS2010后,项目B就不能添加项目A的引用,添加时会报错,大概意思是.net

版本太高,原以为是2.0不能调用3.5,后来自己做实验,发觉是可以调用的。但如果这个3.5项目中添加了一些不属于2.0的技术,那就会出现上述的问题。

当时想到的解决方法是将项目B的目标框架改成3.5,但因为这个软件开发得很早,很多项目的目标框架都是2.0,项目B又是一个基础的组件,被很多其它

项目引用,若改项目B,那很多项目都要改(考虑安全因素,尽量不要大动,)既然这条路行不通,那就改用反射,添加项目C,C中定义一些接口,A中实现

这些接口,B不直接调用A,而是调C(是不是很乱啊!)

创建三个项目

1 SampleObject35 目标框架3.5

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using SampleObject2;
 6 namespace SampleObject35
 7 {
 8    public class SampleCalcute:ISampleCalcute
 9     {
10        public void PrintSum(int a, int b)
11        {
12            var sum = a + b;
13            Console.WriteLine(sum);
14             }
15
16     }
17 }

2 SampleObject2   目标框架2.0

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4
 5 namespace SampleObject2
 6 {
 7   public  interface ISampleCalcute
 8     {
 9     void PrintSum(int a, int b);
10     }
11 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using System.Reflection;
 5 namespace SampleObject2
 6 {
 7     public class CalcuteInstance
 8     {
 9         public static ISampleCalcute GetSampleInstance()
10         {
11             string directory = AppDomain.CurrentDomain.BaseDirectory;
12             string filename = directory + "SampleObject35.dll";
13             if (System.IO.File.Exists(filename))
14             {
15                 Assembly ass = Assembly.LoadFile(filename);
16                 object obj = ass.CreateInstance("SampleObject35.SampleCalcute", true, BindingFlags.Public | BindingFlags.Instance, null, null, null, null);
17                 if (obj is ISampleCalcute)
18                 {
19                     return (ISampleCalcute)obj;
20                 }
21             }
22             return null;
23         }
24     }
25 }

3 SampleInvoke2 目标框架2.0

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 using SampleObject2;
 5 namespace SampleInvoke2
 6 {
 7   public  class Sample
 8     {
 9
10       public static void Main(string[] args)
11       {
12           ISampleCalcute sampleCalcute = CalcuteInstance.GetSampleInstance();
13           sampleCalcute.PrintSum(2,3);
14           Console.ReadKey();
15
16       }
17     }
18 }

注意:需要将SampleObject35放在SampleInvoke2的lib目录下

以上情况只是针对对原因旧系统的一些改造,如果是新系统,就没有必要用2.0啦。

时间: 2024-10-29 10:20:16

.net低版本调用高版本的相关文章

数据库低版本附加高版本的问题

我的机房收费系统是在自己笔记本上敲的,敲完了以后把本上数据库拷了出来,放到台式机上,准备通过台式机来验收系统.当我附加数据库的时候,提示 "数据库'charge_sys'的版本为661,无法打开.此服务器支持655版及更低版本.不支持降级路径." 这是因为我本上的SQL是2008R2版的,而机房的电脑上的数据库是2008版的(当然,2008版以下的也会出现这种情况).暂时我知道的解决方法只有 两种: 一.就是把低版本电脑的SQL升级,升到高版本就可以了.但这样不仅浪费时间,而且很麻烦.

使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)

前言:重装系统前我使用的是vs2015(有点装*),由于使用2015实在在班上太另类了, 导致我想在其他同学的vs下看一看我写的代码都无法达成! 而且最关键的是交作业的时候,老师的2013也没有办法打开这个版本! 所以在重装过后,我就安装的2013了,但是要使用以前我的项目就只有更改配置,所以在此记录下怎样使用vs2013打开VS2015的工程文件,希望对大家有所帮助! 图文说明: 首先使用记事本或者notepad++打开你的项目的sln文件 按照如图所示做出更改 在工程文件中找到后缀名为.vc

转:使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)

http://www.cnblogs.com/WayneLiu/p/5060277.html 前言:重装系统前我使用的是vs2015(有点装*),由于使用2015实在在班上太另类了, 导致我想在其他同学的vs下看一看我写的代码都无法达成! 而且最关键的是交作业的时候,老师的2013也没有办法打开这个版本! 所以在重装过后,我就安装的2013了,但是要使用以前我的项目就只有更改配置,所以在此记录下怎样使用vs2013打开VS2015的工程文件,希望对大家有所帮助! 图文说明: 首先使用记事本或者n

powerdesigner低版本打开高版本方式为只读导致无法保存PD只读read-only-mode

由于版本号不一致 打开PD文件后提示: 点击[确定]后打开,点击[取消]后打不开 但打开后修改完毕保存提示: 解决办法: pdm文件实际上是个xml文件,直接用文本编辑器打开该文件修改版本号即可 把根节点最后的版本号改成你的PD版本号再保存就可以打开编辑了. PD版本号查看方法:打开PD>>帮助>>关于powerdesigner

APMServ5.2.6 升级PHP版本 到高版本 5.3,5.4

首先下载:http://windows.php.net/downloads/releases/ Thursday, August 21, 2014 2:26 AM 17069447 php-5.4.32-Win32-VC9-x86.zip 为保证安装成功起见,停掉apache,mysql服务 然后解压,得到一个新的目录: 把原来APMServ目录中的PHP目录中的:ext , extras 两个目录复制过来,遇到重复文件,不要覆盖,跳过即可! 再将原APMServ目录中的PHP目录中的: lib

补充:关于如何用低版本vs打开高版本项目存在的一些后续问题

在"如何用低版本vs打开高版本项目"一文中,分享了一个解决方案,但是,出现一个问题:有些解决方案修改参数("如何用低版本vs打开高版本项目"解决方案详解)时,会无法正常打开,这时候新的解决方案出现. 就wpf为例,还是低版本打开高版本问题. 1.找到.csproj,双击打开. 2.重新生成解决方案.sln文件. 3. .sln文件的替换和保存.

将CAD图纸转换成高版本的DWG格式应该怎么进行?

将CAD图纸转换成高版本的DWG格式应该怎么进行?CAD图纸文件有的时候会因为图纸的版本问题而无法将其进行打开查看的操作,图纸文件版本过低或是过高都无法将其进行打开查看,具体应该进行的操作就是将其进行版本间的转换,将CAD图纸文件进行向高版本转换应该怎么样进行,下面小编就要来教大家的就是将CAD图纸转换成高版本的DWG格式应该怎么进行的全部操作步骤,希望能够帮助到你们,望采纳! 步骤一:首先要打开电脑,打开浏览器在搜索框中输入"迅捷CAD转换器"去到迅捷CAD官网上然后点击下载然后进行

html5调用本机摄像头兼容谷歌浏览器高版本,谷歌浏览器低版本,火狐浏览器

做这个功能的时候在网上查了一些资料,代码如下,在这个代码在谷歌浏览器46版本是没问题的,在火狐浏览器也行,但是在谷歌浏览器高版本下是不兼容的 <div id="body"> <section class="featured"> <div class="content-wrapper"> <hgroup class="title"> <h1>Welcome to web

高版本Android如何利用反射调用系统隐藏的远程服务拦截来电

要说拦截Android系统来电,就不得不说起在低版本的时候Android提供给开发者使用的一个方法:endCall(),但由于谷歌后来考虑到对于一部手机来说,最重要的功能就是打电话了,如果这个功能随随便便就被人屏蔽了,安全性太差,所以在高版本的Android将这个方法屏蔽了,不再在TelephoneManager中暴露这个方法. 那么我们下面的目标就是要想办法调用到这个方法,当然首先我们还是需要实现一个广播接收者,来接收电话状态改变的广播,这里使用在服务中动态注册广播接收者的方法来实现,主要好处