web-dev-qa-db-fra.com

Quelle est la meilleure façon d'utiliser Razor dans une application console

Je sais que des questions similaires ont déjà été posées, mais les seules réponses possibles datent de six ans et les projets cités par les gens semblent ne pas être entretenus.

Je souhaite utiliser Razor dans une application console ou une bibliothèque de classes pour le rendu HTML. J'aimerais également que Intellisense fonctionne dans les fichiers .cshtml. 

Actuellement, je suis en mesure de truquer le jury en procédant comme suit:

  • Créer une application console.
  • Ajouter un fichier .cshtml.
  • Dans Propriétés, définissez la propriété Custom Tool sur RazorTemplatePreprocessor

Cela entraîne la reconnaissance de la syntaxe Razor. Donc, si vous avez Test.cshtml, il génère une classe appelée Test que vous pouvez utiliser comme suit:

var test = new Test();
test.Model = "Hi there";
var html = test.GenerateString();

Console.WriteLine(html);

C'est à peu près suffisant pour mes objectifs. Cependant, l’expérience de codage dans le fichier .cshtml est plutôt cassée:

  • Il y a des squigglies rouges partout se plaignant de:
    • Ne pas pouvoir utiliser var parce que c'est C # 2.
    • Impossible de trouver le type ou l’espace de noms de différents types.
    • Ce qui précède s’applique particulièrement aux types importés d’autres bibliothèques. 
  • Le mot clé @model n'est pas reconnu.
  • Intellisense fonctionne parfois, parfois non. 

Bizarrement, si vous ignorez simplement toutes ces erreurs, le code HTML est en fait généré correctement, ce qui inclut l'utilisation des bibliothèques et le mot clé @model pour lesquels le moteur Razor s'est plaint. Cependant, cela engendre un encombrement mental important, car si vous avez un nombre quelconque de fichiers .cshtml, vous entrerez très rapidement dans des centaines et des milliers de ces erreurs mélangées avec de vraies erreurs. 

Est-ce que je peux faire quelque chose pour que l'expérience de codage Razor fonctionne plus comme dans une application web ASP.NET? 

10
Brian Rak

J'utilise généralement des modèles T4 en dehors de l'application ASP.NET: https://msdn.Microsoft.com/en-US/library/bb126445.aspx . Il existe plusieurs plugins pour Visual Studio qui permettent la mise en surbrillance du code, par exemple http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html .

Bien sûr, T4 n'est pas équivalent à Razor et vous devriez apprendre la syntaxe pour pouvoir l'utiliser, mais je pense que l'utilisation de Razor en dehors de webapp est un mauvais style ...

En utilisant T4, vous pouvez créer à partir de modèles vos propres classes avec des propriétés et des constructeurs fortement typés, ce qui est bien plus que ne le permet Razor.

1
Serega

Il suffit d'utiliser RazorEngine library.

le fichier cshtml intellisense est pris en charge conformément à la documentation.

0
restVeggie