Невозможно скомпилировать шаблон с помощью помощника поиска — несовместимость подписи или прозрачности безопасности

Я пытаюсь использовать следующий шаблон (TestTemplate) в консольном приложении, используя .NET Core 2.1 и Handlebars.Net 1.9.5.

<html>
<head>
    <title>A title</title>
</head>

<body>
    {{ > (lookup TemplateName)}}
</body>
</html>

So the line with {{ > (lookup TemplateName)}} is causing me problems.

Идея состоит в том, чтобы использовать партиал, где частичное имя будет разрешено позже путем передачи переменной TemplateName.

Однако, когда я пытаюсь скомпилировать шаблон с помощью

var foo = Resource1.TestTemplate;
Handlebars.Compile(Encoding.UTF8.GetString(foo));

Я получаю следующее исключение:

System.ArgumentException: невозможно выполнить привязку к целевому методу, поскольку его подпись или прозрачность безопасности несовместимы с типом делегата. at System.Reflection.RuntimeMethodInfo.CreateDelegateInternal(Type delegateType, Object firstArgument, DelegateBindingFlags bindingFlags) at HandlebarsDotNet.Compiler.SubExpressionVisitor.GetHelperDelegateFromMethodCallExpression(MethodCallExpression helperCall) at HandlebarsDotNet.Compiler.SubExpressionVisitor.VisitSubExpression(SubExpressionExpression subex) at System.Linq.Expressions.ExpressionVisitor .VisitUnary(узел UnaryExpression) в System.Linq.Expressions.UaryExpression.Accept(посетитель ExpressionVisitor) в System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments(посетитель ExpressionVisitor, узлы IArgumentProvider) в System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(узел MethodCallExpression ) в System.Linq.Expressions.MethodCallExpression.Accept(посетитель ExpressionVisitor) в System.Linq.Expressions.ExpressionVisitor.VisitUnary(узел UnaryExpression) в System.Linq.Expressions.UaryExpression.Accept(посетитель ExpressionVisitor) в System.Linq.Expressions. ВыражениеVisito r.VisitConditional(узел ConditionalExpression) в System.Linq.Expressions.ConditionalExpression.Accept(посетитель ExpressionVisitor) в System.Dynamic.Utils.ExpressionVisitorUtils.VisitBlockExpressions(посетитель ExpressionVisitor, блок BlockExpression) в System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression node) в System.Linq.Expressions.BlockExpression.Accept(посетитель ExpressionVisitor) в HandlebarsDotNet.Compiler.FunctionBuilder.Compile(выражения IEnumerable1, Expression parentContext, String templatePath) --- Конец внутренней трассировки стека исключений --- в HandlebarsDotNet.Compiler .FunctionBuilder.Compile (выражения IEnumerable1, Expression parentContext, String templatePath) в HandlebarsDotNet.Compiler.FunctionBuilder.Compile (выражения IEnumerable1, String templatePath) --- Конец внутренней трассировки стека исключений --- в HandlebarsDotNet.Compiler.FunctionBuilder.Compile( выражения IEnumerable1, String templatePath) в HandlebarsDotNet.Handlebars.HandlebarsEnvironment.Compi le(Шаблон строки)

Я надеюсь, что у кого-то есть идея, потому что я уже довольно долго искал.


person bluedot    schedule 26.09.2018    source источник


Ответы (1)


Хорошо, я полностью пропустил, что просматривал документацию HandleBars.js.

В HandleBars.js встроен помощник поиска, но пока его нет в версии .net.

Таким образом, вы должны сами объявить помощник поиска, что в моем случае выглядит примерно так:

Handlebars.RegisterHelper("lookup", (output, context, arguments) => { output.WriteSafeString(arguments[0]); }); 

Надеюсь, это может помочь кому-то еще.

person bluedot    schedule 27.09.2018
comment
Спасибо, что добавили это! Хотелось бы также увидеть PR, чтобы добавить его в основную библиотеку. Ваше здоровье! - person Rex M; 27.07.2019