我正在尝试使用利用TcpClient的C#插件来统一构建UWP应用程序。该插件使用System.Net.Sockets。当我构建独立的可执行文件时,该应用程序在我的本地计算机上运行完美。但是,当我尝试为Universal 10平台构建它时,它不起作用。这很重要,因为我的目标是在Hololens上部署应用程序。
我在控制台中收到错误CS0246:
The type or namespace TcpClient could not be found (are you missing a using directive or an assembly reference?)
我遇到过让TcpClient与Unity合作遇到类似问题的人。我尝试按照此解决方案安装预发布的System.Net.Sockets 4.1软件包:https://github.com/dotnet/corefx/issues/5939
我在Visual Studio中打开了C#项目,并成功安装了4.1版。但是,当我再次尝试构建时,我遇到了同样的错误。这是我的packages.config文件:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="System.IO" version="4.0.0" targetFramework="net461" />
<package id="System.Net.Primitives" version="4.0.10" targetFramework="net461" />
<package id="System.Net.Sockets" version="4.1.0-beta-23516" targetFramework="net461" />
<package id="System.Runtime" version="4.0.0" targetFramework="net461" />
<package id="System.Threading.Tasks" version="4.0.0" targetFramework="net461" />
</packages>
我也遇到过这个解决方案,它使用来自Windows.Networking.Sockets包的StreamSocket: How to connect to Unity game server socket from UWP app via sockets?
我考虑过重写所有代码以使用StreamSocket。但是,由于我没有编写原始代码,因此这很难并且容易出错。
我正在处理的代码是Brekel Pro Face 2中包含的数据流脚本。我会从代码中发布一些代码片段,但我不确定Brekel是否可以使用它。
有什么想法吗?
答案 0 :(得分:1)
问题
Unity目标是Mono,它要求插件是.NET平台DLL。但是,Hololens支持Windows Universal应用程序,它要求插件是通用窗口平台(UWP)DLL。因此,Unity和Hololens都不可能使用相同的插件。如果它适用于Unity,那么Hololens的构建将失败。
解决方案
解决方案是使用两个版本的插件; .NET平台DLL和UWP DLL。这两个DLL应该具有相同的接口,以允许使用相同的代码从两个DLL中的任何一个引用类,方法等。
解决方案步骤
假设您已经创建了具有相同接口的两个DLL文件(x.dll)和(x.uwp.dll)(即命名空间,公共类名等),解决方案应该像以下一样简单:< / p>
现在,Unity将在您的计算机上运行项目时使用x.dll,并在为Hololens构建项目时使用x.uwp.dll。