我可以将 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 重定向吗?