【问题标题】:Platform-dependent compilation of C# DLLC# DLL 的平台相关编译
【发布时间】:2019-01-11 10:38:20
【问题描述】:

我正在尝试设置一堆托管 C# dll 以在 Unity3D 中工作,但我正在努力完成这项工作:

想象一下,对于平台 A 使用 C# 管理 Platform.dll,对于平台 B 使用 Platform.dll。

现在我想构建一个 C# 托管 dll,比如 Core.dll,它依赖于 Platform.dll,但它本身没有任何依赖于平台的代码。我认为应该可以构建一个托管的 C# dll,它在运行时查找正确的 Platform.dll(假设只启用了一个 Platform.dll)。

这可能吗?如果可以,怎么做?还是我必须坚持使用不同的 Core.dll,这些 Core.dll 又依赖于平台,因为底层 Platform.dll 是?

【问题讨论】:

  • 好的,让我澄清一下问题:如果 Core.dll 依赖于 Platform.dll(并且我有多个 Platform.dll),我是否需要构建多个 Core.dll(我想要避免)还是单个 Core.dll 就足够了(就在底层 DLL 上找到正确的入口点而言)?

标签: c# unity3d dll platform


【解决方案1】:

如果您在 Unity 中正确设置了您的 dll(即,在相关平台中包含/排除它们),Unity 应该只在构建中包含一个 Platform.dll。如果 Core.dll 不使用仅存在于 Platform.dll 子集中的任何接口,它应该可以正常工作。否则,在尝试为相应 Platform.dll 与 Core.dll 不兼容的任何平台构建 Unity 项目时,您将遇到异常。

【讨论】:

  • 是的,包含/排除是我已经做对了,但只是为了确保:这意味着即使 Core.dll 在编译时从平台 A 链接到 Platform.dll,它稍后在为平台 B 构建各自的项目时,应该能够从平台 B 引用 Platform.dll - 对于编码到其中的函数没有硬编码的入口点,这在 A 和 B 的 Platform.dll 之间有所不同...
  • AFAIK,Unity 在构建播放器时链接 dll。编译 Core.dll 时需要 Platform.dll 之一,但是当您为该平台构建时,链接到相应平台特定的 dll Unity 应该为您完成。不知道非托管 dll 是否也是如此,但托管代码应该“正常工作”。
  • 嗨,好的,这可能适用于构建平台。编辑器呢?我只是尝试使用与平台无关的 Core.dll 和与平台相关的 Platform.dll。虽然它设置为引用正确的 Platform.dll(在我的情况下为 OSX),但它给了我类似 MissingMethodException: Method 'getDeviceInfo' not found 的信息。 DeviceChecker+c__async0.MoveNext () (at :0) --- 从之前抛出异常的位置结束堆栈跟踪--- System.Runtime.ExceptionServices.ExceptionDispatchInfo。所以它不适用于编辑器环境...
猜你喜欢
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多