Executando verificação de segurança...
2

É legal a ideia, mas seu código parece bastante perigoso e lento. Você invoca código durante o runtime. Para isso, tem que compilar e executar o código, que já é um tempo gigantesco. É a mesma ideia do RazorLight.

O perigo está na execução de código malicioso em um ambiente que você não tem total controle dos arquivos "template" que serão usados.

Para contornar o tempo de espera toda vez que for compilar um script do template, você pode fazer o template expor um método que irá compilar o template e compilar uma vez só, depois de chamar o CSharpScript.EvaluateAsync, o método já estará disponível no seu AppDomain, então poderá invocá-lo através de reflexão, sem exigir outra compilação.

Você precisará gerar uma namespace para cada script gerado também, é claro.

Uma alternativa ainda mais segura é usar source generators, que é uma ferramenta avançada, mas super performática.

Eu venho há algum tempo cuidando de um gerador de HTML que criei usando C#. O foco dele é ser super simples, minimalista, fácil de usar. Algo como:

string[] Products = ["Camisa", "Calça", "Tênis"];
string Cliente = "João da Silva";

HtmlElement body = HtmlElement.Fragment(
    HtmlElement.Auto("style", """
        * {
            background-color: red;
        }
        """),
    HtmlElement.Auto("h1", "Pedido confirmado!"),
    HtmlElement.Auto("p", "Cliente: ",
        HtmlElement.Auto("strong", Cliente)),
    HtmlElement.Auto("p", "Você comprou os produtos:"),
    HtmlElement.Auto("ul",
        Products.Select(p => HtmlElement.Auto("li", p))),
    HtmlElement.Auto("p", "Obrigado por comprar conosco!"));

Gera este resultado:

<style>
    * {
        background-color: red;
    }
</style>
<h1>Pedido confirmado!</h1>
<p>Cliente: <strong>João da Silva</strong></p>
<p>Você comprou os produtos:</p>
<ul>
    <li>Camisa</li>
    <li>Calça</li>
    <li>Tênis</li>
</ul>
<p>Obrigado por comprar conosco!</p>

Em só alguns ciclos de processamento.

Carregando publicação patrocinada...
1

Excelente ponto! Foi algo que já estava observando enquanto eu analisava o tempo de execução. O grande obstáculo que enfrento é quanto a leitura de um arquivo .html, as instruções C# estão nele, sigo na luta para deixar isso cada vez mais leve e rápido para o processador. Dei uma olhada na sua, e confesso, está ficando incrível!

Com seu feedback já consigo pensar nas próximas melhorias!

Agradeço sua colocação!