You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Umbraco 8.1创建Sitemap报CS1525: Invalid expression term '<'错误

报错原因

CS1525: Invalid expression term '<' 是Razor视图解析阶段抛出的错误:你在@{ }C#代码块内定义的局部方法中直接编写XML标签,本地调试时IIS Express默认使用运行时动态编译视图,可以正常识别代码块内嵌的标签标记;站点部署到生产环境后,若开启了视图预编译、或运行时Razor解析配置与本地不一致,解析器会把XML开头的<识别为C#代码中的小于运算符,而非输出标记的起始符号,直接触发解析错误。

修复方案

方案1:用标签显式标记输出内容(改动最小)

Razor提供的<text>标签不会被输出到最终响应内容中,仅用于告知解析器标签包裹的内容是需要直接输出的原生标记,不属于C#代码逻辑。修改后的方法代码如下:

@{
    void RenderSiteMapUrlEntry(IPublishedContent node)
    {
        var changeFreq = node.Value("searchEngineChangeFrequency", fallback: Fallback.To(Fallback.Ancestors, Fallback.DefaultValue), defaultValue: "monthly");
        // 相对优先级为单页独立设置,不做递归继承,无值时默认0.5
        var priority = node.HasValue("searchEngineRelativePriority") ? node.Value("searchEngineRelativePriority") : "0.5";

        <text>
        <url>
            <loc>@node.Url(mode: UrlMode.Absolute)</loc>
            <lastmod>@(string.Format("{0:s}+00:00", node.UpdateDate))</lastmod>
            <changefreq>@changeFreq</changefreq>
            <priority>@priority</priority>
        </url>
        </text>
    }
}

方案2:拼接XML字符串后输出(兼容性最高)

如果方案1在生产环境依然触发解析错误,可以完全避开在C#代码块中直接写XML标签,将节点内容拼接为字符串后通过Html.Raw()输出,彻底避免解析器混淆代码和标记:

@{
    void RenderSiteMapUrlEntry(IPublishedContent node)
    {
        var changeFreq = node.Value("searchEngineChangeFrequency", fallback: Fallback.To(Fallback.Ancestors, Fallback.DefaultValue), defaultValue: "monthly");
        var priority = node.HasValue("searchEngineRelativePriority") ? node.Value("searchEngineRelativePriority") : "0.5";
        var absoluteUrl = node.Url(mode: UrlMode.Absolute);
        var updateTime = string.Format("{0:s}+00:00", node.UpdateDate);
        
        var entryContent = $@"
<url>
    <loc>{absoluteUrl}</loc>
    <lastmod>{updateTime}</lastmod>
    <changefreq>{changeFreq}</changefreq>
    <priority>{priority}</priority>
</url>";
        Html.Raw(entryContent);
    }
}

方案3:排查生产环境部署配置

如果代码修改后问题仍存在,逐一检查以下配置项:

  • 发布站点时取消勾选「预编译视图」选项,视图预编译的解析逻辑和运行时动态编译存在差异,很容易触发这类标签识别错误
  • 确认生产环境Views目录下的站点地图视图文件已完整覆盖部署,无旧版本文件残留、文件缺失问题
  • 确认生产环境Web.config中配置的Razor页面版本与本地开发环境一致,无版本不匹配问题

额外注意:站点地图视图需要在文件开头设置响应头为XML格式,添加代码Response.ContentType = "application/xml";,避免浏览器按HTML格式解析返回内容。

内容的提问来源于stack exchange,提问作者Spar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:25:03