gpt4 book ai didi

.net - 未找到字段 : System. Text.RegularExpressions.Regex.internalMatchTimeout

转载 作者:行者123 更新时间:2023-12-01 05:19:06 25 4
gpt4 key购买 nike

我们遇到了这里描述的问题:field-not-found-exception-with-net-4-4-5-compiled-regexes

简而言之:我尝试在已更新为 .Net 4.5 的机器上构建 .Net 4.0 程序集。所以我的目标是 .Net 4.0。尝试在仅安装了 .Net 4.0 的机器上运行此程序集时,出现以下异常:未找到字段:“System.Text.RegularExpressions.Regex.internalMatchTimeout”。

如果我在没有更新到 .Net 4.5 的机器上构建相同的程序集,我可以在 .Net 4.0 机器上运行生成的程序集,没有任何问题。换句话说:在 .Net 4.5 机器上生成的 .Net 4.0 程序集与在 .Net 4.0 机器上生成的程序集不同。

该程序集提供预编译的正则表达式。

我可以通过以下任一方式解决此问题:

  • 在 .Net 4.0 系统上构建反汇编。
  • 将目标机器升级到 .Net 4.5。

  • 然而,这两种解决方案都存在问题:
  • 我们为各种目标构建程序集,包括 WinRT。我们现在面临的问题是我们不能使用一台机器来构建所有这些,这使我们的构建/测试过程变得复杂。
  • 生产的组件被运送给客户。如果我们告诉他们升级到 .Net 4.5,以便使用 4.0 程序集,他们不会都高兴。

  • 除了摆脱预编译的正则表达式之外,你们中有人知道更好的解决方案吗?

    最佳答案

    从您的问题中不清楚,但我假设您正在调用 Regex.CompileToAssembly,在这种情况下,下面发生的是生成一个程序集,该程序集与生成它的运行时紧密耦合,因此如果您在 .NET 4.5 上运行它,它将引用了新的“internalMatchTimeout”字段。除了总是在 .NET 4.0 运行时(解决方案 1)上生成该程序集之外,您是否考虑过在首次使用时编译它们并缓存它们?

    RegEx re = new Regex(pattern, RegExOptions.Compiled);

    那么您可以简单地在您的应用程序中缓存您需要的所有正则表达式。虽然这会在第一次使用时带来一些性能上的影响,但它会防止在您的构建中出现很多问题。

    关于.net - 未找到字段 : System. Text.RegularExpressions.Regex.internalMatchTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17829171/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com