自定义dll集成到HoloLens项目中

时间:2016-09-16 07:10:47

标签: c# .net dll unity5 hololens

我有一个自定义库,其源代码可以成功编译并生成.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 for Hololens生成的另一个VS2015解决方案中。 Unity自动构建的解决方案包含3个项目:1)Assembly-CSharp包含HoloToolkit文件夹,2)Assembly-CSharp firstpass和3)Origami

screenshot

我从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 =" .. \玩家\ UAP \ 86 \调试" " 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 \ Documents \ UnityToVS2015Projects \ HoloAcademy101 - Origami \ Origami \ App \ Origami \ UnityEngine.Networking.dll" " C:\ Users \ lakeb \ Documents \ UnityToVS2015Projects \ HoloAcademy101 - Origami \ Origami \ App \ Origami \ UnityEngine.VR.dll""退出代码1.

  • [取消之前的步骤再次编译Origami]我想的第二种方法是通过插入project.json文件中的行来添加它

    " my.hololens.library":" version"

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

  

Payload包含两个或多个具有相同目标路径的文件' 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 \包\的System.Net.Sockets \ 4.0.0 \ LIB \ netcore50 \ System.Net.Sockets.dll   Payload包含两个或多个具有相同目标路径的文件&Systems.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   Payload包含两个或多个具有相同目标路径的文件&Systems.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(> = version) - > 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)Origami(> = 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不兼容,版本= v10.0(win10-x86-aot)。   一个或多个软件包与UAP不兼容,版本= v10.0(win10-arm-aot)。   System.Reflection.Emit.ILGeneration 4.0.1为UAP,Version = v10.0上的System.Reflection.Emit.ILGeneration提供了编译时引用程序集,但没有与win10-x86-aot兼容的运行时程序集。   System.Reflection.Emit.ILGeneration 4.0.1为UAP上的System.Reflection.Emit.ILGeneration提供了编译时引用程序集,版本= v10.0,但没有与win10-x64-aot兼容的运行时程序集。   System.Reflection.Emit.ILGeneration 4.0.1为UAP,Version = v10.0上的System.Reflection.Emit.ILGeneration提供了编译时引用程序集,但没有与win10-x86-aot兼容的运行时程序集。   System.Reflection.Emit.ILGeneration 4.0.1为UAP上的System.Reflection.Emit.ILGeneration提供了编译时引用程序集,版本= v10.0,但没有与win10-x64-aot兼容的运行时程序集。   一个或多个程序包与UAP不兼容,版本= v10.0(win10-x64-aot)。   检测到System.Collections的版本冲突。 Assembly-CSharp(> = 1.0.0) - > my.hololens.library(> = version) - > 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)Assembly-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不兼容,版本= v10.0(win10-x64-aot)。   一个或多个软件包与UAP不兼容,版本= v10.0(win10-x86-aot)。   System.Reflection.Emit.ILGeneration 4.0.1为UAP,Version = v10.0上的System.Reflection.Emit.ILGeneration提供了编译时引用程序集,但没有与win10-arm-aot兼容的运行时程序集。   一个或多个软件包与UAP不兼容,版本= v10.0(win10-arm-aot)。   System.Reflection.Emit.ILGeneration 4.0.1为UAP,Version = v10.0上的System.Reflection.Emit.ILGeneration提供了编译时引用程序集,但没有与win10-arm-aot兼容的运行时程序集。

我对于该怎么回事感到困惑。有人说要生产一个可移植的库,我也试着研究here NETFramework,NETCore和NETStandard之间的关系,但它似乎比预期的要复杂。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

in this image

现在,您可以在#if !UNITY_EDITOR

下的统一脚本中访问此dll