我想要一个用于C#的PCRE的AnyCPU dll。在当前可用的PCRE.NET中,由于其C ++依赖性,我们可以将其设置为32位或64位。是否存在可以真正实现MSIL的实现,例如使用带有if else的DllImport来根据应用程序选择正确的源。如果没有,任何人都可以指导如何制作一个。任何帮助将不胜感激
答案 0 :(得分:2)
免责声明:我是PCRE.NET的作者。
PCRE.NET是一个AnyCPU程序集,它同时提供x86 和 x64版本的本机库。它将在运行时选择正确的一个。它不会运行或ARM或任何其他架构。
如果您需要一些细节,主MSIL程序集在其资源中包含两个混合模式程序集。在运行时,它将选择正确的一个,将其解压缩到%TEMP%
,然后加载并使用它。
您需要安装MSVC 2015 redistributable软件包,因为C ++ / CLI部分依赖于它。
要使该库与.NET 4兼容,您必须使用IReadOnlyList<T>
,IList<T>
和Volatile.Write
替换某些接口,例如Thread.VolatileWrite
等。< / p>
关于这一行:
System::Threading::Volatile::Write(_calloutInfoByPatternPosition, dict);
您可以将其替换为:
#undef MemoryBarrier
System::Threading::Thread::MemoryBarrier();
_calloutInfoByPatternPosition = dict;
不是那么漂亮,但有效。
最后但并非最不重要的是,确保运行构建脚本(build/Build.Bat
)来编译库,因为它将执行在PCRE中嵌入混合模式程序集所需的步骤.NET.dll。