[[Обновление .csproj файлов|Вернуться назад]] > Пока я писал самописный IPC-сервер в Unity, я столкнулся с проблемой: [[Использовать SynchronizationContext, вместо EditorApplication.delayCall для работы в главном потоке из thread-pool-потоков]] ### Скрипт в проекте (`Assets/Editor/CsprojIpcServer.cs`) ```csharp #if UNITY_EDITOR using System.Net; using System.Net.Sockets; using System.Threading.Tasks; using UnityEditor; [InitializeOnLoad] public static class CsprojIpcServer { const int Port = 44124; // выберите свободный порт static CsprojIpcServer() { Task.Run(async () => { var listener = new TcpListener(IPAddress.Loopback, Port); listener.Start(); while (true) { using var client = await listener.AcceptTcpClientAsync(); using var reader = new StreamReader(client.GetStream()); var cmd = await reader.ReadLineAsync(); if (cmd == "refresh") { // мгновенное обновление csproj UnityEditor.SyncSolution.SyncSolution(); AssetDatabase.Refresh(); } } }); } } #endif ``` ### Клиент (любой внешний C#-утилит) ```csharp using System.Net.Sockets; using System.Text; public static void PingUnity() { using var client = new TcpClient("127.0.0.1", 44124); var msg = Encoding.UTF8.GetBytes("refresh\n"); client.GetStream().Write(msg, 0, msg.Length); } ``` _На открытом Editor’е пересоздание решения занимает ≤ 1 с и не требует перезапуска Unity._