4

我们遇到了这里描述的问题: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 机器上生成的程序集不同。

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

我可以通过以下方式解决这个问题:

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

然而,这两种解决方案都存在问题:

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

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

4

3 回答 3

1

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

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

那么您可以简单地在您的应用程序中缓存您需要的所有正则表达式。虽然这会在第一次使用时产生一点性能影响,但它会防止在你的构建中大量跳跃。

于 2013-08-01T16:56:23.933 回答
0

显然,这是 .NET 4.5 本身或 Visual Studio 的向后兼容性错误。而且它相当旧,如果我们可以从第一个发布日期判断,并且没有解决到该日期(您是否在 4.5 系统上安装了所有 .NET 和 VS 更新?)。如果现在还没有修补,那么我会选择解决方案 1(不能指望 MS 会快速修复错误)。

于 2013-07-24T10:32:30.507 回答
0

问题陈述:.svc在 IIS 中 浏览任何文件时,出现类似错误

"未找到字段:'System.Text.RegularExpressions.Regex.internalMatchTimeout' "

解决方案: 我已经修复了现有.NET框架(在我的情况下是 4.5.2)并重新启动服务器,它开始工作。

于 2018-08-04T06:42:42.683 回答