【问题标题】:Can I redirect a c# class to another dll?我可以将 c# 类重定向到另一个 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 - 您可以。

标签: c# overriding version libraries


【解决方案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。所以我不知道对它有多少控制。
    猜你喜欢
    • 2015-04-04
    • 2022-10-24
    • 2017-05-17
    • 2014-06-24
    • 2011-12-14
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多