欢迎光临散文网 会员登陆 & 注册

不同程序集,名称空间类名和方法签名都一样的方法,如何调用

2023-02-21 08:35 作者:Newbe36524  | 我要投稿

有时候,你可能会遇到这样的问题,不同程序集,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。

创建两个不同的程序集

我们来创建两个不同的程序集,但是他们的名称空间一样:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

修改他们的 RootNamespace 为 Example:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

然后,我们在两个程序集中都创建一个类,类名也一样,并且添加一个自定义 Where 扩展方法:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

创建一个控制台应用

然后,我们创建一个控制台应用,来调用这两个程序集中的 Where 方法:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

然后,我们在控制台应用中调用这两个程序集中的 Where 方法:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

如果是这样的话,我们会得到这个错误:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

通过别名的方式来解决

我们可以通过别名的方式来解决这个问题,首先修改项目文件,设置两个程序集的别名:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

然后,我们在控制台应用中调用这两个程序集中的 Where 方法:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

运行就会得到这样的结果:

Bilibili 代码块无法正常渲染,因此无法正常显示。请关注微信公众号“newbe技术专栏”,搜索对应文章代码内容。

为什么会有这种问题

一般来说你会在三种情况下遇到这个问题:

  1. 某个开源项目使用 ILmerge 把多个程序集合并成一个程序集。其中一个依赖项 A 恰好也是你的依赖项,但是 A 的版本和开源项目的依赖项 A 的版本不一样,这时候你就会遇到这个问题。

  2. 很早之前 Rx.net 正对 System.Linq.Async 进行了支持,而后来系统也内置了 System.Linq.Async。你会在使用 Rx.net 的时候遇到这个问题。

  3. 你的同事想考验你一下,估计把自己写的 Sqlite 扩展和 MSSQL 扩展中加入了同样的方法签名,然后你就会遇到这个问题。

总结

通过别名的方式,我们可以解决不同程序集,名称空间类名和方法签名都一样的方法,如何调用的问题。

参考

  • extern alias (C# Reference)1

感谢您的阅读,如果您觉得本文有用,快长按右下角大拇指👍为本文点赞~

欢迎关注作者的微信公众号“newbe技术专栏”,获取更多技术内容。

  • 本文作者: newbe36524

  • 本文链接: https://www.newbe.pro/Others/0x022-how-to-call-a-method-with-the-same-method-signature-in-different-assemblies/

  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

  1. https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/extern-alias?WT.mc_id=DX-MVP-5003606↩


不同程序集,名称空间类名和方法签名都一样的方法,如何调用的评论 (共 条)

分享到微博请遵守国家法律