Ciekawą opcją jest WASM. Jednak w przypadku C# jest dopiero w fazie wczesnego rozwoju.
Możesz skompilować logikę aplikacji napisaną w C# do WASM. Następnie z pomocą JS obsłużyć interakcję użytkownika wywołując odpowiednie funkcje (np.Przy kliknięciu przycisku wywołać funkcję JS, które pobiera liczby z inputów, a następnie wywołuje funkcję sumującą z WASM, przyjmującą jako argumenty liczby do zsumowania i zwracającą sumę. Potem z pomocą JS wyświetlić otrzymany wynik).
.NET and WebAssembly - Is this the future of the front-end?
github.com/lrz/mono-wasm