A.dll引用了Base.dll (2.0);
UI.Exe同时引用了 A.dll和Base.dll(1.0)
是否能实现?紧急求救!
其中A.dll 中有一个UserControl,要加载到UI.exe某个Panel中。谢谢
解决你的问题,参看文章:在同一个程序里使用不同版本的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
你说的这种,跟楼上是一样的。我也测试过。我说的情况跟你写的不一样。引用2.0不是直接引用,而是通过A.DLL。这样子就不行。如果是一个Exe直接引用2个不同版本的DLL,并且直接调用,是可以的。
@呆在呆呆的家:
这样应该是没有问题i的,A.dll在引用1.0的时候也做好名字空间,应用程序引用2.0的时候也做好名字空间,不会有问题。
可以用强命名来导入两个dll
麻烦请详解下。谢谢
你说的这种方法,问题是Base.dll不是我们开发的,是购买的。
看能不能动态加载Base.dll,而不是添加引用,比如: Assembly assembly = Assembly.LoadFrom("Base.dll");
用过,不好使。
@呆在呆呆的家: 还有一招,用extern alias给程序集取个别名。
@LCM: 你这个应该可以一个exe加载2个不同版本的dll。不过,解决不了我说的这种情况。不是直接引用吧。
@呆在呆呆的家: 你的这种情况用extern alias一样的可以解决的。和是否同一个exe加载没关系。
@LCM: 我也测试过。我说的情况跟你写的不一样。引用2.0不是直接引用,而是通过A.DLL。这样子就不行。如果是一个Exe直接引用2个不同版本的DLL,并且直接调用,是可以的。
一个程序集同时引用另外两个具有不同程序集版本的程序集时,可以使用“外部别名”的方法,具体方法可以查阅msdn文档,不是很复杂的。注意在发布的时候,两个不同版本的程序集要同时发布,由于名称相同,所以可以放在不同的文件夹当中,然后在app.config文件中进行相关配置即可。