用于 PCRE 的 AnyCPU .net 包装器

AnyCPU .net wrapper for PCRE

我想要一个适用于 C# 的 PCRE 的 AnyCPU dll。在当前可用的 PCRE.NET 中,由于其 C++ 依赖性,我们可以将其设为 32 位或 64 位。是否有一个可以真正成为 MSIL 的实现,例如将 DllImport 与 if else 一起使用以根据应用程序选择正确的源。如果没有,谁能指导如何制作一个。任何帮助将不胜感激

Disclaimer: I'm the author of PCRE.NET.

PCRE.NET 是一个 AnyCPU 程序集,它同时提供 x86 内部库的 x64 版本。它将在 运行 时间选择正确的一个。它不会 运行 或 ARM 或任何其他架构。

如果您需要一些详细信息,主 MSIL 程序集的资源中包含两个混合模式程序集。在运行的时候,它会选择正确的,解压成%TEMP%,然后加载使用。

你需要安装 MSVC 2015 redistributable 包,因为 C++/CLI 部分依赖于它。


为了使库与 .NET 4 兼容,您必须将一些接口替换为 IReadOnlyList<T>IList<T>Volatile.WriteThread.VolatileWrite 等。

关于这一行:

System::Threading::Volatile::Write(_calloutInfoByPatternPosition, dict);

您可以将其替换为:

#undef MemoryBarrier
System::Threading::Thread::MemoryBarrier();
_calloutInfoByPatternPosition = dict;

不是很漂亮,但是可以。

最后但同样重要的是,确保 运行 构建脚本 (build/Build.Bat) 来编译库,因为它将执行所需的步骤将混合模式程序集嵌入 PCRE.NET.dll.