Windows サービス ホストで電子メールをレンダリングしようとしています。
Razor 2 をサポートする coxp によってフォークされた RazorEngine 3 を使用します。 https://github.com/coxp/RazorEngine/tree/release-3.0/src
これは、いくつかの電子メール テンプレートでは問題なく動作しますが、問題を引き起こしているものがあります。
@model string
<a href="@Model" target="_blank">Click here</a> to enter a new password for your account.
これにより CompilationException がスローされます: The name 'WriteAttribute' does not exist in the current context. そのため、文字列をモデルとして渡し、それを href-attribute に入れると問題が発生します。
この行を次のように変更することで機能させることができます。
@Raw(string.Format("<a href=\"{0}\" target=\"_blank\">Klik hier</a>.", @Model))
しかし、これによりテンプレートが非常に読みにくくなり、さらにスタイリングするためにマーケティング部門に渡すのが難しくなります。
Nuget パッケージを使用して RazorEngine を参照することは解決策ではないことを付け加えたいと思います。これは Razor 1 に基づいており、プロセスのどこかで system.web.razor の DLL がバージョン 2 に置き換えられ、RazorEngine を使用するコードが壊れるからです。Razor 2 を使用して新機能を活用し、最新の状態に保つ方が興味深いようです。
これを修正する方法についての提案は素晴らしいでしょう。体験談も大歓迎です。
更新 1
SetTemplateBaseType を呼び出すと役立つようですが、このメソッドはもう存在しないため、templatebasetype をバインドするにはどうすればよいでしょうか?
//Missing method in the new RazorEngine build from coxp.
Razor.SetTemplateBaseType(typeof(HtmlTemplateBase<>));