【问题标题】:Using a .dll in Unity C#在 Unity C# 中使用 .dll
【发布时间】:2014-09-06 00:58:07
【问题描述】:

我目前正在使用 Unity3D,需要导入在 VS2008 中编译的 .dll 文件,使用 .net 2.0。它在 PC 版本上运行得非常好,并且就像我想要的那样运行,但它以某种方式破坏了我的 iOS 版本。我什至没有在移动设备上使用 .dll,链接到 dll 的代码 (DllImport) 仅在 PC 版本中编译。

在为 iOS 构建时遇到以下错误:

ArgumentException: The Assembly Microsoft.VisualC is referenced by mydll. But the dll is not allowed to be included or could not be found.

我已将 api 兼容性级别(在统一的所有平台的播放器设置中)更改为 .net 2.0,并构建了针对 2.0 .net 级别的我的 dll。

为什么 dll 甚至在我的构建中?导入 .dll 的正确步骤是什么,也许我错过了一些重要的东西?

快速编辑:最终没有为 iphone 正确设置 .net api 兼容性,但我仍然遇到一些错误:

Error building Player: NullReferenceException: Object reference not set to an instance of an object

我认为这是在播放器创建的 AOT 交叉编译阶段。也许有人知道如何处理这个?

另外,我的问题可能不清楚,但我的 DLL 使用托管代码来访问 .net 函数。

更新:我一直在努力解决这个问题,现在我想知道是否有一种方法可以简单地将这个 .dll 从我的 iOS 构建中排除? (除了每次我想构建时手动进行)。我似乎无法找到一种方法来做到这一点。我试过剥离,但它不适用于我的应用程序的其他部分(破坏了一些东西),现在我有点迷路了。我可以手动删除并添加它作为一种解决方法,但我真的想要一个更清洁的解决方案!

【问题讨论】:

  • 我不希望 Visual Studio 中内置的 DLL 可以在 iOS 应用程序中使用。
  • 没错,我没有在我的 iOS 应用程序中使用它。它适用于应用程序的 PC 版本,但由于某种原因,它包含在我的 iOS 应用程序中,并且阻止我构建我的 iOS 应用程序。
  • 我们怎么知道是什么原因造成的?通常的故障排除适用;检查您的 iOS 代码中是否存在对 DLL 的虚假引用,检查您的 IDE 的配置和参考文件。
  • 检查了我的代码,一切正常。
  • 如果您从项目中删除 dll,iOS 是否可以正常构建?

标签: ios .net dll unity3d compatibility


【解决方案1】:

据我所知,您不能只从一个平台剥离 dll。

您可以在需要时自行加载 dll。将dll扩展名更改为.bytes,将其加载为byte[]并推送到System.Reflection.Assembly.Load

应该有效,但可能会有一些副作用。

【讨论】:

  • 这种方法会有什么样的副作用?现在,我宁愿手动完成,然后再分解...
  • 不完全确定。我的猜测是静态可能有启动问题,AOT 可能完全破坏或只是泛型(在 webplayer 中)。也许与单一行为相关的东西不会触发。如果你正确地测试它,你应该是安全的。
  • 动态代码有机会被App Store拒绝:answers.unity.com/questions/892645/assemblyload-on-ios.html
  • 切换到 IL2CPP(iOS 11 需要)后,这可能在 iOS(或 WebGL)上根本不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多