Невозможно скомпилировать шаблон с помощью помощника поиска - подпись или прозрачность безопасности не совместимы - PullRequest
0 голосов
/ 26 сентября 2018

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

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

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

Так что строка с{{> (lookup TemplateName)}} вызывает у меня проблемы.

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

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

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

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

System.ArgumentException: невозможно связать с целевым методом, поскольку его подпись или прозрачность безопасности не совместимы сэто типа делегата.в System.Reflection.RuntimeMethodInfo.CreateDelegateInternal (тип delegateType, объект firstArgument, DelegateBindingFlags BindingFlags) в HandlebarsDotNet.Compiler.SubExpressionVisitor.GetHelperDelegateFromMethodCallExpression (MethodCallExpression helperCall) при HandlebarsDotNet.Compiler.SubExpressionVisitor.VisitSubExpression (SubExpressionExpression Subex) при System.Linq.Expressions.ExpressionVisitor.VisitUnary (узел UnaryExpression) в System.Linq.Expressions.UnaryExpression.Accept (посетитель ExpressionVisitor) в System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments (посетитель ExpressionVisitor, узлы IArgumentProvider) в узле System.Linq.ExpressitExExression.Exception) в System.Linq.Expressions.MethodCallExpression.Accept (посетитель ExpressionVisitor) в System.Linq.Expressions.ExpressionVisitor.VisitUnary (узел UnaryExpression) в System.Linq.Expressions.UnaryExpression.Accept (посетитель ExpressionVisitorq) в System.L.ExpressionVisitor.VisitConditional (узел ConditionalExpression) в System.Linq.Expressions.ConditionalExpression.Accept (посетитель ExpressionVisitor) в System.Dynamic.Utils.ExpressionVisitorUtils.VisitBlockExpressions (посетитель ExpressionVisitor, блок BlockExpression) в System.Linq.Expressis.Vpressionузел) в System.Linq.Expressions.BlockExpression.Accept (посетитель ExpressionVisitor) в HandlebarsDotNet.Compiler.FunctionBuilder.Compile (выражения IEnumerable1, выражение parentContext, String templatePath) --- конец трассировки стека внутренних исключений --- в HandlebarsDotNet.Compiler.FunctionBuilder.Compile (выражения IEnumerable1, Expression parentContext, String templatePath) в HandlebarsDotNet.Compiler.FunctionBuilder.Compile (выражения IEnumerable1, String templatePath) --- Конец внутренней трассировки стека исключений --- в HandlebarsDotNet.Compiler.FunctionBuilder.IEnumerable1 выражений, String templatePath) на HandlebarsDotNet.Handlebars.HandlebarsEnvironment.Compile (шаблон строки)

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

1 Ответ

0 голосов
/ 27 сентября 2018

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

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

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

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

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

...