无法使用Lookup Helper编译模板-签名或安全透明性不兼容

时间:2018-09-26 10:30:46

标签: handlebars.net

我正在尝试在使用.NET Core 2.1和Handlebars.Net 1.9.5的控制台应用程序中使用以下模板(TestTemplate)

<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(类型委托类型,对象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.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression节点) 在System.Linq.Expressions.MethodCallExpression.Accept(ExpressionVisitor访问者) 在System.Linq.Expressions.ExpressionVisitor.VisitUnary(UnaryExpression节点) 在System.Linq.Expressions.UnaryExpression.Accept(ExpressionVisitor访问者) 在System.Linq.Expressions.ExpressionVisitor.VisitConditional(ConditionalExpression节点) 在System.Linq.Expressions.ConditionalExpression.Accept(ExpressionVisitor访问者) 在System.Dynamic.Utils.ExpressionVisitorUtils.VisitBlockExpressions(ExpressionVisitor访问者,BlockExpression块) 在System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression节点) 在System.Linq.Expressions.BlockExpression.Accept(ExpressionVisitor访问者) 在HandlebarsDotNet.Compiler.FunctionBuilder.Compile(IEnumerable1表达式,Expression parentContext,字符串templatePath)-内部异常堆栈跟踪的结尾-在HandlebarsDotNet.Compiler.FunctionBuilder.Compile(IEnumerable1表达式,Expression parentContext,字符串templatePath) 在HandlebarsDotNet.Compiler.FunctionBuilder.Compile(IEnumerable1表达式,String templatePath)-内部异常堆栈跟踪的结尾-在HandlebarsDotNet.Compiler.FunctionBuilder.Compile(IEnumerable1表达式,String templatePath) 在HandlebarsDotNet.Handlebars.HandlebarsEnvironment.Compile(字符串模板)处

我希望有人有一个主意,因为我已经搜索了很长时间。

1 个答案:

答案 0 :(得分:1)

好吧,我完全想念了我在看HandleBars.js文档。

在HandleBars.js中,查找帮助器是内置的,但到目前为止,它不是.net版本。

所以您必须自己声明查找助手,在我的情况下,它是这样的:

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

希望它可以帮助其他人。