首页 新闻 赞助 找找看

一个EXE如何同时加载同一程序集不同版本

0
悬赏园豆:200 [已解决问题] 解决于 2012-03-27 12:20

A.dll引用了Base.dll (2.0);

UI.Exe同时引用了 A.dll和Base.dll(1.0)

是否能实现?紧急求救!

 

其中A.dll 中有一个UserControl,要加载到UI.exe某个Panel中。谢谢

呆在呆呆的家的主页 呆在呆呆的家 | 初学一级 | 园豆:30
提问于:2012-03-09 12:50
< >
分享
最佳答案
0

解决你的问题,参看文章:在同一个程序里使用不同版本的dll 还有这里

老版本:

 

using System;
namespace MyLibrary
{
public class MyClass
{
public static string method()
{
return "From old version ClassLibrary2";
}
}
}

新版本:

 

using System;
namespace MyLibrary
{
public class MyClass
{
public static string method()
{
return "From new version ClassLibrary2";
}
}
}

在使用的时候如下:

 

extern alias oldVer;
extern alias newVer;
using System;
using System.Text;
namespace ClientApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(oldVer::MyLibrary.MyClass.method());
Console.WriteLine(newVer::MyLibrary.MyClass.method());
}
}
}

可以在命令行里制定:

 

csc /r:oldVer=Somepath\ClassLibrary.dll /r:newVer=AnotherPath\ClassLibrary.dll program.cs





收获园豆:50
zsounder | 老鸟四级 |园豆:2819 | 2012-03-11 10:34

你说的这种,跟楼上是一样的。我也测试过。我说的情况跟你写的不一样。引用2.0不是直接引用,而是通过A.DLL。这样子就不行。如果是一个Exe直接引用2个不同版本的DLL,并且直接调用,是可以的。

呆在呆呆的家 | 园豆:30 (初学一级) | 2012-03-11 11:13

@呆在呆呆的家: 

这样应该是没有问题i的,A.dll在引用1.0的时候也做好名字空间,应用程序引用2.0的时候也做好名字空间,不会有问题。

zsounder | 园豆:2819 (老鸟四级) | 2012-03-11 11:37
其他回答(4)
0

可以用强命名来导入两个dll

收获园豆:50
邀月 | 园豆:25475 (高人七级) | 2012-03-09 13:11

麻烦请详解下。谢谢

支持(0) 反对(0) 呆在呆呆的家 | 园豆:30 (初学一级) | 2012-03-09 13:24

你说的这种方法,问题是Base.dll不是我们开发的,是购买的。

支持(0) 反对(0) 呆在呆呆的家 | 园豆:30 (初学一级) | 2012-03-11 11:15
0

看能不能动态加载Base.dll,而不是添加引用,比如: Assembly assembly = Assembly.LoadFrom("Base.dll");

LCM | 园豆:6876 (大侠五级) | 2012-03-09 13:12

用过,不好使。

支持(0) 反对(0) 呆在呆呆的家 | 园豆:30 (初学一级) | 2012-03-09 13:25

@呆在呆呆的家: 还有一招,用extern alias给程序集取个别名。

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2012-03-09 13:32

@LCM: 你这个应该可以一个exe加载2个不同版本的dll。不过,解决不了我说的这种情况。不是直接引用吧。

支持(0) 反对(0) 呆在呆呆的家 | 园豆:30 (初学一级) | 2012-03-09 15:32

@呆在呆呆的家: 你的这种情况用extern alias一样的可以解决的。和是否同一个exe加载没关系。

支持(0) 反对(0) LCM | 园豆:6876 (大侠五级) | 2012-03-09 15:35

@LCM: 我也测试过。我说的情况跟你写的不一样。引用2.0不是直接引用,而是通过A.DLL。这样子就不行。如果是一个Exe直接引用2个不同版本的DLL,并且直接调用,是可以的。

支持(0) 反对(0) 呆在呆呆的家 | 园豆:30 (初学一级) | 2012-03-11 11:14
0
收获园豆:50
喵喵喵猫 | 园豆:1742 (小虾三级) | 2012-03-09 20:25
0

一个程序集同时引用另外两个具有不同程序集版本的程序集时,可以使用“外部别名”的方法,具体方法可以查阅msdn文档,不是很复杂的。注意在发布的时候,两个不同版本的程序集要同时发布,由于名称相同,所以可以放在不同的文件夹当中,然后在app.config文件中进行相关配置即可。

收获园豆:50
致远书生 | 园豆:409 (菜鸟二级) | 2012-03-11 11:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册