为什么Blazor应用程序中的XML验证在localhost和Azure静态Web应用程序上提供不同的消息?

为什么Blazor应用程序中的XML验证在localhost和Azure静态Web应用程序上提供不同的消息?,azure,xsd,xml-validation,blazor-webassembly,azure-static-web-app,Azure,Xsd,Xml Validation,Blazor Webassembly,Azure Static Web App,编辑 我做了一个简化的回购协议 我正在Blazor WebAssembly(TargetFramework=net5.0)中构建一个XML编辑器。部分功能涉及根据包含三个include的复杂xsd模式验证XML的完整性 以下是我遵循的步骤: 通过为每个xsd调用以下方法,构建XmlSchemaSet并向其中添加4个模式: 正在使用以下命令初始化事件处理程序: 将XML加载到XmlDocument中: 根据schemaSet进行验证: 步骤3和4在Try…Catch块中运行,当XML格式不正确时

编辑 我做了一个简化的回购协议


我正在Blazor WebAssembly(TargetFramework=net5.0)中构建一个XML编辑器。部分功能涉及根据包含三个include的复杂xsd模式验证XML的完整性

以下是我遵循的步骤:

  • 通过为每个xsd调用以下方法,构建XmlSchemaSet并向其中添加4个模式:
  • 正在使用以下命令初始化事件处理程序:
  • 将XML加载到XmlDocument中:
  • 根据schemaSet进行验证:
  • 步骤3和4在Try…Catch块中运行,当XML格式不正确时(例如缺少结束标记),
    document.Load(reader)在本地运行行生成错误,并显示如下消息:

    The 'publicationStmt1' start tag on line 9 position 11 does not match the end tag of 'publicationStmt'. Line 11, position 12.
    
    这很好。但是验证部署到Azure的应用程序中的类似情况会产生以下错误消息:
    Xml\u messagewitherroposition,Xml\u tagmismatchx,11,12

    当行
    document.Validate(eventHandler)时,在事件处理程序中捕获架构验证错误运行,典型消息为:

    The element 'fileDesc' in namespace 'http://www.tei-c.org/ns/1.0' has invalid child element 'publicationStmt1' in namespace 'http://www.tei-c.org/ns/1.0'. List of possible elements expected: 'editionStmt, extent, publicationStmt' in namespace 'http://www.tei-c.org/ns/1.0'.
    
    但在Azure上运行时,消息是
    Sch_InvalidElementContentExpecting

    本地运行与Azure中运行的验证结果存在差异的原因是什么?

    我试图通过添加以下内容来禁用链接:

    <ItemGroup>
      <BlazorLinkerDescriptor Include="LinkerConfig.xml" />
    </ItemGroup>
    
    
    
    但这并没有对部署的应用程序产生影响,在本地运行Release而不是Debug也不会改变任何东西


    我还确保从Azure运行时实际加载了4个xsd文件。

    Blazor似乎没有包含类中的本地化错误消息模板。我猜Blazor在通过CI/CD管道构建时会将其剥离。您的开发机器和构建代理可能具有不同的区域设置

    我建议尝试使用以下方法来强制绑定所有区域性和/或基于
    en_US
    加载不变区域性:

    
    真的
    真的
    
    您还提到了调整,但根据文档,它只适用于
    版本
    构建(您似乎还没有尝试部署调试版本)。所以我建议尝试部署应用程序的调试版本,以完全消除链接器

    您还可以强制链接所有i18资源:

    
    全部的
    
    并将
    System.Xml
    添加到
    LinkerConfig.Xml
    中,以便无需进一步优化即可将其提供给客户端:


    所以这是一个功能而不是一个bug

    dotnet/runtime团队收集了一个我在Dev上打开的社区,并将其添加到GitHub问题跟踪器中

    事实证明,删除异常消息是为了节省大小


    使用
    false
    启用异常消息,我必须说我没有看到大小增加。

    在Azure中运行时,是否使用Blazor服务器而不是Blazor WebAssembly?不,在静态Web应用程序上使用WebAssembly谢谢。我尝试了你的第一个和第二个建议,没有任何区别。问题:System.Xml文件是什么意思?如何部署调试构建(通过GitHub部署过程在Azure静态Web应用程序上)?
                document.Schemas = schemaSet;
                document.Validate(eventHandler);
    
    The 'publicationStmt1' start tag on line 9 position 11 does not match the end tag of 'publicationStmt'. Line 11, position 12.
    
    The element 'fileDesc' in namespace 'http://www.tei-c.org/ns/1.0' has invalid child element 'publicationStmt1' in namespace 'http://www.tei-c.org/ns/1.0'. List of possible elements expected: 'editionStmt, extent, publicationStmt' in namespace 'http://www.tei-c.org/ns/1.0'.
    
    <ItemGroup>
      <BlazorLinkerDescriptor Include="LinkerConfig.xml" />
    </ItemGroup>