HoloLens 1 が TCP 経由でローカル ネットワーク上の別の PC に接続する約 2 日前まで、アプリケーションは正常に動作していました。
最近、TcpClient() デフォルト コンストラクターを呼び出すたびに上記のエラーがスローされます。(デフォルトであるため)値が渡されていないため、エラーが発生している値がわかりません。
HoloLens slack の誰かからリンクされた次の解決策を試しました: https://github.com/Azure/azure-remote-rendering/issues/6
その解決には、Unity 2019.3.15f への更新が必要です。Visual Studio、Windows SDK、および Unity の複数の異なる構成を試しました。
犯人がil2cppであることを示していると思われる他の投稿を複数見つけました。関連する出力のコピーを次に示します。
UnloadTime: 7.610200 ms
Exception thrown at 0x771E3AE2 in TCPTest.exe: Microsoft C++ exception: Il2CppExceptionWrapper at memory location 0x025CE7EC.
Exception thrown at 0x771E3AE2 in TCPTest.exe: Microsoft C++ exception: Il2CppExceptionWrapper at memory location 0x025CE90C.
ArgumentException: Value does not fall within the expected range.
at System.Net.Sockets.Socket.SetSocketOption (System.Net.Sockets.SocketOptionLevel optionLevel, System.Net.Sockets.SocketOptionName optionName, System.Int32 optionValue) [0x00000] in <00000000000000000000000000000000>:0
at System.Net.Sockets.Socket.set_DontFragment (System.Boolean value) [0x00000] in <00000000000000000000000000000000>:0
at System.Net.Sockets.Socket.SocketDefaults () [0x00000] in <00000000000000000000000000000000>:0
at System.Net.Sockets.Socket..ctor (System.Net.Sockets.AddressFamily addressFamily, System.Net.Sockets.SocketType socketType, System.Net.Sockets.ProtocolType protocolType) [0x00000] in <00000000000000000000000000000000>:0
at System.Net.Sockets.TcpClient.initialize () [0x00000] in <00000000000000000000000000000000>:0
at System.Net.Sockets.TcpClient..ctor (System.Net.Sockets.AddressFamily family) [0x00000] in <00000000000000000000000000000000>:0
at System.Net.Sockets.TcpClient..ctor () [0x00000] in <00000000000000000000000000000000>:0
at TcpTestClient.Start () [0x00000] in <00000000000000000000000000000000>:0
(Filename: currently not available on il2cpp Line: -1)
これまでに発生したこのエラーの最小の発生は次のとおりです。
新しい Unity プロジェクト (バージョンは関係ないようです)
シーンに GameObject を追加し、以下を添付します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net.Sockets;
public class TcpTestClient : MonoBehaviour
{
private TcpClient tcpClient;
// Start is called before the first frame update
void Start()
{
tcpClient = new TcpClient();
if (tcpClient != null)
{
Debug.Log("Constructor succeeded!");
}
}
}
HoloLens 1 に指定されているように Unity ビルド設定を構成し、発行設定 > 機能に InternetClient、InternetClientServer、PrivateNetworkClientServer を必ず含めます。
適切なビルド ツールがインストールされた Visual Studio 2017 または 2019 でビルドし、結果のソリューションを開きます。HoloLens にデプロイすると、結果のエラーがデバッグ コンソールに出力されます。
読んでくれてありがとう、誰かが持っている洞察を本当に感謝します。