我们遇到了此处描述的问题: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计算机上生成的程序集相同。
程序集提供预编译的正则表达式。
我可以通过以下方式解决这个问题:
然而,两种解决方案都存在问题:
除了摆脱预编译的正则表达式之外,你们中的任何人都知道一个更好的解决方案吗?
答案 0 :(得分:1)
从您的问题中不清楚,但我假设您正在调用Regex.CompileToAssembly,在这种情况下,下面发生的是生成的程序集与生成的运行时紧密耦合,因此如果您在.NET 4.5上运行它然后它将引用新的“internalMatchTimeout”字段。除了总是在.NET 4.0运行时(解决方案1)上生成该程序集之外,您是否考虑过在首次使用时对其进行编译并对其进行缓存?
RegEx re = new Regex(pattern, RegExOptions.Compiled);
然后您只需在应用中缓存所需的所有RegEx即可。虽然这会在第一次使用时给予一点点打击,但它会阻止你的构建中大量的跳跃。
答案 1 :(得分:0)
显然,这是.NET 4.5本身或Visual Studio的向后兼容性错误。它是rather old,如果我们可以从第一个发布日期判断,并且没有解决到日期(你是否已经在4.5系统上安装了所有.NET和VS更新?)。如果它现在没有修补,那么我会选择解决方案1(不能指望MS会快速修复错误)。
答案 2 :(得分:0)
问题陈述:
在IIS中浏览任何.svc
文件时,出现
“ 未找到字段: 'System.Text.RegularExpressions.Regex.internalMatchTimeout'”
解决方案:
我已经修复了现有的.NET
框架(以我的情况为4.5.2),并重新启动了服务器,服务器开始工作。