XSLT使用msxsl:script调用VBScript Date函数报错问题咨询
报错原因
该问题是.NET托管环境下msxsl脚本的标识符命名冲突导致的,具体逻辑如下:
- VS 2019的XSLT调试器使用.NET框架的XSLT处理器执行带msxsl扩展脚本的样式表,脚本运行在.NET托管上下文的VB兼容解析环境中,而非独立的VBScript解释器
- 该上下文中
Date标识符会被优先绑定到.NET内置的System.DateTime值类型(旧版.NET框架中该类型曾别名Date),不会被识别为VBScript内置的无参Date()函数 - 你编写的
Year(Date)代码会被解析器误判为VB.NET的泛型调用语法Year(Of Date),但Year函数本身不支持泛型参数,因此抛出「无类型参数、不能传入类型实参」的报错 Now没有对应的.NET内置类型重名,因此会被正确识别为VBScript的Now()内置函数,返回合法的日期时间值传入日期处理函数,运行正常
解决方法
如果要保留Date函数的使用,只需要给Date加括号明确标识为函数调用即可:
Function Today() Today= year(Date()) & "-" & LeadNumWith0(month(Date())) & "-" & LeadNumWith0(day(Date())) End Function
也可以直接使用Now函数替代,你的代码仅取年月日部分,二者使用效果完全一致。
内容的提问来源于stack exchange,提问作者Bochen Lin
相关产品推荐
相关产品推荐

