我可以将 c# 类重定向到另一个 dll 吗?

Posted

技术标签:

【中文标题】我可以将 c# 类重定向到另一个 dll 吗?【英文标题】:Can I redirect a c# class to another dll? 【发布时间】:2021-04-05 16:29:02 【问题描述】:

这是我的问题。有一个带有核心库 core2.dll 的游戏引擎,其中有一个 C 类。

它是一个带有 c# 包装器的 windows 类。

我想主要使用 core2.dll 中的所有类,除了一个我想使用以前版本的库 core1.dll 中的类

如果您尝试从 core2.dll 调用该类,则会出现“已弃用的错误消息”。

我认为这门课是相当独立的。 (比如说它是一些数学函数)所以我的想法是在我的项目中同时包含 core2.dll 和 core1.dll,但不知何故只从 core1.dll 生成类 C。

对如何(如果有的话)实现这一目标有任何想法吗?

【问题讨论】:

是的。你可以。您可以将这两个 DLL 版本引用到不同的命名空间中,并且两个版本类都可用。如果你放一些代码来显示你想要做什么,你的问题会更有趣。 谢谢@T.S.我不是 C# 方面的专家,你有例子吗? 什么例子?这个 VS 函数。您添加参考。但默认进入global::。在参考属性的解决方案资源管理器中有字段aliases。如果为 ddl (v1) 设置别名,则设置别名如 dll_v1。然后在代码var a = new dll_v1::myclass(); 谢谢。我不明白我害怕。 :( 当然 - 是的,当然 - 不是。但是,如果您想将v1cls.Method1 用于某事,然后在其他情况下使用v2cls.Method2 - 您可以。 【参考方案1】:

如果您需要替换 core2.dll 中的部分代码,那么您可以使用 ildasm 进行反编译,更改 core2.dll 中所需的部分并重新编译。

运行x64_x86 Cross Tools Command Prompt for VS 2017 并执行

ildasm core1.dll /OUT=core1.il
ildasm core2.dll /OUT=core2.il


REM open il files with text editor, find classes in core1.il and replace them in core2.il 
REM note, that there might be no core2.res

ilasm core2.il /RESOURCE=core2.res /DLL

如果没有对 dll 进行签名,这绝对可以正常工作。更好的是——你组装成代码,所以 ilasm 将确保你的代码在运行时工作。运行时不兼容是绑定重定向的一个非常烦人的问题...

确保您没有违反任何许可和版权。

【讨论】:

【参考方案2】:

你需要为两个 dll 使用外部别名

这是一个例子: https://www.learningsomethingnew.com/how-to-use-two-versions-of-the-same-dll-in-the-same-project

【讨论】:

好的。我知道了。我正在使用 Unity,所以我想知道是否可以在那里进行。我认为 Unity 会自动导入 dll。所以我不知道对它有多少控制。

以上是关于我可以将 c# 类重定向到另一个 dll 吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 Cloudflare 将子域重定向到另一个 DNS 吗?

插槽在哪个线程中执行,我可以将其重定向到另一个线程吗?

我可以对包含的外部 javascript 文件使用 301 重定向吗?

将 c# 应用程序打开到另一台电脑时出现无法加载 ace.dll32 的错误

Next JS 静态站点:将特定路由重定向到另一个站点?

如何在c#中使用innerhtml重定向到另一个页面