在一个二进制文件中定位多个.NET框架?

的背景:

我有一个应用程序需要在已安装的.NET框架范围从2.0到4.5的客户端上运行。 此应用程序必须能够枚举和执行大量文件的操作(在特定情况下超过200k个离散文件)。

要构建文件的索引,应用程序当前使用System.IO.DirectoryInfo.GetFiles()。 这是性能问题,因为处理组件在开始工作之前必须等待整个Path树进行索引。 由于一些古老的磁带多路加载器和一些写得不好的固件,遍历一些目录可能会触发从磁带读取 - 将处理时间从几十秒钟提升到几十分钟。

.NET 4.0提供了System.IO.Directory.EnumerateFiles(Path)方法,可以缓解这个问题。 但是,只有少数数据控制台升级到4.0+,我们的现代化诉求已经遭到敌意。

问题:

是否可以在一个二进制文件中实现GetFiles和EnumerateFiles的方法? 实际上,这将是针对.NET 2.0的单个二进制文件,如果在运行时确定4.0框架可用,则可以调用.NET 4.0方法。

在提及之前:更改数据不是我们客户的选择。 我试过了。 我有没有试过。


您将无法(轻松)制作一个适用于.NET 2.0并使用.NET 4.0方法的单个二进制文件。 有各种各样的迂回方式 - 反射等,但在你的情况下,这似乎是一个坏主意。

但是,没有理由不能为.NET 2.0库中的EnumerateFiles创建自己的实现。 为此,您需要对WIN32函数FindFirstFileFindNextFile进行P / Invoke调用。 两个CodeProject项目看起来像它们覆盖了这个区域,并且应该在源代码中包含正确的位:

  • http://www.codeproject.com/Articles/12782/File-System-Enumerator-using-lazy-matching
  • http://www.codeproject.com/Articles/38959/A-Faster-Directory-Enumerator
  • 链接地址: http://www.djcxy.com/p/48279.html

    上一篇: Targeting multiple .NET frameworks in a single binary?

    下一篇: Check if a program has thrown an exception