.Net中使用aliases让相同命名空间的dll引用共存

简介:

有些不得已的时候,我们需要同时在代码中使用某个dll的不同版本。比如用低版本的dll中的方法导出数据,然后使用高版本的方法导入数据来实现数据的升级. 又或者需要同时使用第三方的dll不同版本。如何使它们并存于系统中是个难题。

如果同时存在于系统中,会出现ambiguous refrence(有歧义的引用)的编译错误。下文介绍如何使用aliases解决这个问题。

一, 构建两个不同版本的Project

首先构建2个不同的Project来模拟不同版本的dll引用, 这两个project中的命名空间和类名完全相同。

在MultipleVersionTest项目中同时引用这两个Project. 如下图:

blog1

HighVersion项目中的代码

复制代码
public class NameProvider
{
       public static string GetName()
       {
           return "Name From high version";
       }
}
复制代码

LowVersion项目中的代码

复制代码
public class NameProvider
{
       public static string GetName()
       {
           return "Name From Low version";
       }
}
复制代码

在MultipleVersionTest项目中,

复制代码
class Program
{
       static void Main(string[] args)
       {
           System.Console.WriteLine(NameProvider.GetName());
           System.Console.ReadLine();
       }
}
复制代码

从下图能看出来, 出现的编译错误。

blog2

二,使用aliases区分不同的dll

1. 在MultipleVersiontTest项目中,分别修改应用的Aliases, 从默认的global改成low和high

blog11

2. 使用extern alias,区分不同版本dll中的类

复制代码
extern alias low;
extern alias high;

namespace MultipleVersionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine(low::NameFactory.NameProvider.GetName());
            System.Console.WriteLine(high::NameFactory.NameProvider.GetName());
            System.Console.ReadLine();
        }
    }
}
复制代码

3. 编译成功,运行结果如下:

blog22



本文转自JustRun博客园博客,原文链接:http://www.cnblogs.com/JustRun1983/p/3420055.html,如需转载请自行联系原作者


目录
相关文章
|
2月前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
9 0
|
11月前
|
编译器
.Net命名空间和程序集
我们都知道using有三个作用:·引入命名空间,创建别名,强制资源清理。这次对using 的“引入命名空间”的作用有了一点小疑问:命名空间和程序集有什么关系?
|
C++
【.Net】使用委托实现被引用的项目向上级项目的消息传递事件
在实际项目过程中,经常可能遇到被引用的项目要向上传递消息,但是又不能通过方法进行返回等操作,这个时候委托就派上用场了。以下使用委托,来实现被引用的项目向上传递消息的小教程,欢迎各位大佬提供建议。1、新增控制台项目(一般在CS架构中会用的比较多,用于跨线程传递消息使用)。此处用一个控制台项目来模拟演示使用委托进行消息事件的传递教程。
76 0
【.Net】使用委托实现被引用的项目向上级项目的消息传递事件
|
JSON 数据格式 Python
.NET6新东西--隐式命名空间引用
.NET6新东西--隐式命名空间引用
283 0
.NET6新东西--隐式命名空间引用
|
小程序 C# Windows
|
移动开发 JSON 缓存
钉钉消息机器人.Net通用C#Unity实现钉钉消息通知一个工具类(无需SDK,无其他引用)
钉钉消息机器人.Net通用C#Unity实现钉钉消息通知一个工具类(无需SDK,无其他引用) Chinar —— 心分享、心创新! 助力快速完成 .Net 通用的钉钉Post机器人消息通知 为初学者节省宝贵的时间,避免采坑! 官方文档详细,但实现方式上没有过多的说明。 本质上就是一个 POST 消息请求 所以我们只要, 完成正常发送POST 使得钉钉方从中可获取对应格式的数据 即可!
1074 0
钉钉消息机器人.Net通用C#Unity实现钉钉消息通知一个工具类(无需SDK,无其他引用)
|
Java .NET
[转载] .NET 中可以有类似 JVM 的幻像引用吗?
近日发现一篇不错的文章,文中列举了一些 GC 场景,探讨了 在 .NET 中是需要实现像 JVM 的中的幻像引用。有人质疑其不切实际,也有像 Ayende 大神一言不合就自己做了个 demo。 Do we need JVM’s PhantomReference in .
1275 0
|
开发框架 .NET 开发工具
检查.net dll构建的目标平台是any cpu、x86、x64
原文:检查.net dll构建的目标平台是any cpu、x86、x64 有时候,需要检查构建的dll是否针对正确的平台 可以使用CorFlags.exe(它是.NET Framework SDK的一部分)从dll中查找此信息。
1203 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
47 0