At present, MSBuild has to be loaded into the same process as the language server, which can be problematic when the required version of MSBuild does not target the same SDK / runtime as the language server.
MSBuild Server = process with some sort of API endpoint, hosting an MSBuild ProjectCollection
LSP is basically JSON-RPC, but has requirements which have resulted in it being designed that way.
For MIP, we can probably get away with GRPC or similar.
Tricky bits:
Selecting correct SDK and runtime for MSBuild Server
Launching MSBuild Server so that it uses the correct SDK and runtime
Managing project state, without making the API too chatty
At present, MSBuild has to be loaded into the same process as the language server, which can be problematic when the required version of MSBuild does not target the same SDK / runtime as the language server.
High-level design:
[VSCode Extension] ==LSP==> [Language Server] ==MIP==> [MSBuild Server]
ProjectCollection
LSP is basically JSON-RPC, but has requirements which have resulted in it being designed that way. For MIP, we can probably get away with GRPC or similar.
Tricky bits: