Razor2.0およびRazorEngine3.2.0へのアップグレード後に失敗するRazorEngineプロジェクトがあります
これは、以前のRazor 1.0ベースのバージョンのRazorEngine(3.0.8)では正常に機能しました。
myInstance
クラス(MyClass
)と拡張メソッドのインスタンス( )があります:
namespace MyCompany.Extensions
{
public static class MyClassExtensions
{
public static string ExtensionMethod(this MyClass thing)
{
// do stuff
}
}
}
これをRazorEngineビューで呼び出したい(簡略化された例、これらのメソッドがたくさんあり、すべて同じように失敗します):
@using MyCompany.Extensions
@using MyCompany
@{
var myInstance = new MyClass(Model, ...);
}
Some text @myInstance.ExtensionMethod() some more text
これは、RazorEngineによってコンパイルされたテキストファイルにあります。
string parsedResult = RE::Razor.Parse(fileContent, myModel, "testfile.txt");
問題は、この行(以前は機能していた)がRuntimeBinderException
:をスローすることです。
「MyCompany.MyClass」には「ExtensionMethod」の定義が含まれていません
テキストファイルを次のように変更した場合は注意してください。
Some text @MyClassExtensions.ExtensionMethod(myInstance) some more text
正常に動作するので、拡張メソッドの名前空間を見つける必要があると思います。
私の最初の考えは、渡されたモデルをdynamic
(したがって、それから派生したものdynamic
も)と見なす必要があるということでしたが、で予想されるタイプを認識していRuntimeBinderException
ます。例外は実行時なので、テンプレートのコンパイル中に拡張メソッドを識別できなかったに違いないと思いますが、なぜそれが変更されたのでしょうか。
3.0.8と3.2.0の間で何が変わったのか、なぜこれが壊れているのかわかりません。テンプレートのコンパイル中に拡張メソッドを見つけるために追加する必要があるものはありますか?