【问题标题】:Custom dll integration into a HoloLens project将自定义 dll 集成到 HoloLens 项目中
【发布时间】:2017-01-24 08:09:10
【问题描述】:

我有一个带有源代码的自定义库,可以成功编译并生成 .dll 文件。

问题:考虑到以下错误,将此 dll 包含在 HoloLens 项目中的最佳方法是什么?

我的方法

独立库的project.json文件如下:

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0",
    "Newtonsoft.Json": "9.0.1"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}

或者我也有机会将其添加为 NuGet 包,具体取决于:
- Microsoft.NETCore.UniversalWindowsPlatform (>= 5.2.2)
- Newtonsoft.Json (>= 9.0.1)
- Microsoft.EntityFrameworkCore.Tools (>= 1.0.0-preview2-final)
- Microsoft.EntityFrameworkCore.Sqlite (>= 1.0.1)

然后我需要将此库包含在 Unity 为 Hololens 生成的另一个 VS2015 解决方案中。 Unity 自动构建的解决方案由 3 个项目组成:1) Assembly-CSharp 包含一个 HoloToolkit 文件夹,2) Assembly-CSharp firstpass 和 3) Origami

我从HoloToolkit for Unity 文件夹中获取了一个脚本,并将其应用于GameObject。当一个事件被触发时——并且它成功发生——我想调用这个自定义库提供的一些函数来从同一个脚本中处理它,比如GazeManager.cs。项目1)的project.json如下

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}

我尝试了两种方式:

  • GazeManager.cs 中我在代码中添加了using MyLibrary 并将其作为引用添加到ReferenceManager 中。该库被正确识别,但随后仅声明像 public MyLibrary objectInMyLibrary 这样的变量,就会从正确编译的程序切换到出现以下错误的程序:

命令 ""C:\Users\Antonino\Documents\UnityToVS2015Projects\HoloAcademy101 - Origami\Origami\App\Unity\Tools\AssemblyConverter.exe" -platform=uap -lock="C:\Users\lakeb\Documents \UnityToVS2015Projects\HoloAcademy101 - Origami\Origami\App\Origami\project.lock.json" -bits=32 -configuration=Debug -removeDebuggableAttribute=False -path="." -path="..\Players\UAP\x86\调试" "C:\Users\lakeb\Documents\UnityToVS2015Projects\HoloAcademy101 - Origami\Origami\App\Origami\Assembly-CSharp.dll" "C:\Users\lakeb\Documents\UnityToVS2015Projects\HoloAcademy101 - Origami\Origami\App\ Origami\Assembly-CSharp-firstpass.dll" "C:\Users\lakeb\Documents\UnityToVS2015Projects\HoloAcademy101 - Origami\Origami\App\Origami\UnityEngine.dll" "C:\Users\lakeb\Documents\UnityToVS2015Projects\HoloAcademy101 - Origami\Origami\App\Origami\UnityEngine.UI.dll" "C:\Users\lakeb\Documents\UnityToVS2015Projects\HoloAcademy101 - Origami\Origami\App\Origami\UnityEngine.HoloLens.dll" "C:\Users\lakeb\文档\UnityToVS2015Proj ects\HoloAcademy101 - Origami\Origami\App\Origami\UnityEngine.Networking.dll" "C:\Users\lakeb\Documents\UnityToVS2015Projects\HoloAcademy101 - Origami\Origami\App\Origami\UnityEngine.VR.dll"" 退出代码1.

  • [取消前面的步骤以再次编译折纸]我认为的第二种方法是通过在project.json文件中插入行来添加它

    "my.hololens.library": "版本"

在这种情况下,我收到以下错误

有效负载包含两个或多个具有相同目标路径“System.Net.Sockets.dll”的文件。源文件:C:\Users\Antonino.nuget\packages\runtime.win.System.Net.Sockets\4.1.0\runtimes\win\lib\netcore50\System.Net.Sockets.dllC:\Users\Antonino.nuget \packages\System.Net.Sockets\4.0.0\lib\netcore50\System.Net.Sockets.dll 有效负载包含两个或多个具有相同目标路径“System.Diagnostics.Tools.dll”的文件。源文件:C:\Users\Antonino.nuget\packages\runtime.any.System.Diagnostics.Tools\4.0.1\lib\netcore50\System.Diagnostics.Tools.dllC:\Users\Antonino.nuget\packages\System .Diagnostics.Tools\4.0.0\lib\netcore50\System.Diagnostics.Tools.dll 有效负载包含两个或多个具有相同目标路径“System.Threading.Timer.dll”的文件。源文件:C:\Users\Antonino.nuget\packages\runtime.any.System.Threading.Timer\4.0.1\lib\netcore50\System.Threading.Timer.dllC:\Users\Antonino.nuget\packages\System .Threading.Timer\4.0.0\lib\netcore50\System.Threading.Timer.dll 检测到 System.Collections 的版本冲突。折纸 (>= 1.0.0) -> Assembly-CSharp (>= 1.0.0) -> my.hololens.library (>= 版本) -> Microsoft.EntityFrameworkCore.Tools (>= 1.0.0-preview2-final) -> Microsoft.EntityFrameworkCore.Design (>= 1.0.0-preview2-final) -> Microsoft.EntityFrameworkCore.Design.Core (>= 1.0.0-preview2-final) -> Microsoft.AspNetCore.Hosting.Abstractions (>= 1.0.0) -> Microsoft.AspNetCore.Http.Abstractions (>= 1.0.0) -> System.Reflection.TypeExtensions (>= 4.1.0) -> System.Linq (>= 4.1.0) -> System.集合 (>= 4.0.11) 折纸 (>= 1.0.0) -> Microsoft.NETCore.UniversalWindowsPlatform (>= 5.0.0) -> Microsoft.NETCore.Runtime (>= 1.0.0) -> Microsoft.NETCore。 Runtime.CoreCLR-arm (>= 1.0.0) -> System.Collections (= 4.0.10)。 一个或多个包与 UAP 不兼容,Version=v10.0 (win10-x86-aot)。 一个或多个包与 UAP 不兼容,Version=v10.0 (win10-arm-aot)。 System.Reflection.Emit.ILGeneration 4.0.1 为 UAP 上的 System.Reflection.Emit.ILGeneration 提供了编译时参考程序集,Version=v10.0,但没有与 win10-x86-aot 兼容的运行时程序集。 System.Reflection.Emit.ILGeneration 4.0.1 为 UAP 上的 System.Reflection.Emit.ILGeneration 提供了编译时参考程序集,Version=v10.0,但没有与 win10-x64-aot 兼容的运行时程序集。 System.Reflection.Emit.ILGeneration 4.0.1 为 UAP 上的 System.Reflection.Emit.ILGeneration 提供了编译时参考程序集,Version=v10.0,但没有与 win10-x86-aot 兼容的运行时程序集。 System.Reflection.Emit.ILGeneration 4.0.1 为 UAP 上的 System.Reflection.Emit.ILGeneration 提供了编译时参考程序集,Version=v10.0,但没有与 win10-x64-aot 兼容的运行时程序集。 一个或多个包与 UAP 不兼容,Version=v10.0 (win10-x64-aot)。 检测到 System.Collections 的版本冲突。 Assembly-CSharp (>= 1.0.0) -> my.hololens.library (>= 版本) -> Microsoft.EntityFrameworkCore.Tools (>= 1.0.0-preview2-final) -> Microsoft.EntityFrameworkCore.Design (>= 1.0.0-preview2-final)-> Microsoft.EntityFrameworkCore.Design.Core(>= 1.0.0-preview2-final)-> Microsoft.AspNetCore.Hosting.Abstractions(>= 1.0.0)-> Microsoft.AspNetCore。 Http.Abstractions (>= 1.0.0) -> System.Reflection.TypeExtensions (>= 4.1.0) -> System.Linq (>= 4.1.0) -> System.Collections (>= 4.0.11) 程序集- CSharp (>= 1.0.0) -> Microsoft.NETCore.UniversalWindowsPlatform (>= 5.0.0) -> Microsoft.NETCore.Runtime (>= 1.0.0) -> Microsoft.NETCore.Runtime.CoreCLR-arm (>= 1.0.0) -> System.Collections (= 4.0.10)。 一个或多个包与 UAP 不兼容,Version=v10.0 (win10-x64-aot)。 一个或多个包与 UAP 不兼容,Version=v10.0 (win10-x86-aot)。 System.Reflection.Emit.ILGeneration 4.0.1 为 UAP 上的 System.Reflection.Emit.ILGeneration 提供了编译时参考程序集,Version=v10.0,但没有与 win10-arm-aot 兼容的运行时程序集。 一个或多个包与 UAP 不兼容,Version=v10.0 (win10-arm-aot)。 System.Reflection.Emit.ILGeneration 4.0.1 为 UAP 上的 System.Reflection.Emit.ILGeneration 提供了编译时参考程序集,Version=v10.0,但没有与 win10-arm-aot 兼容的运行时程序集。

我不知道该怎么办。有人说要制作一个可移植的库,我也尝试研究hereNETFramework、NETCore 和 NETStandard 之间的关系,但似乎比想象的要复杂。

【问题讨论】:

    标签: c# .net dll unity5 hololens


    【解决方案1】:

    Unity 3d 不支持集成使用 .Net Core 框架的库。尝试将您的库创建为 .Net Framework 3.5 库并将其放入 Unity 项目的 Assets/Plugins 文件夹中。

    【讨论】:

    • 感谢@Cameron,我在 .NET Framework 3.5 中完成了翻译并被接受了...祝你有美好的一天!
    【解决方案2】:

    您需要创建一个 UWP 库项目并将您的代码移植到该项目并编译、删除错误 将编译好的dll放在assets文件夹中 如下所示更新 Inspector 属性

    现在您可以在 #if !UNITY_EDITOR 块下的统一脚本中访问此 dll

    【讨论】:

    • 也感谢您的解决方案。正如 Cameron [和你一样] 所说的那样移植代码,即将 dll 视为 .Net Framework 3.5 库就成功了。祝你有美好的一天!
    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多