[[Обновление .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._