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

时间:2013-01-29 21:04:39

标签: c# .net multitargeting

背景:

我有一个应用程序需要在已安装的.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方法。

在提到之前:更换数据不是我们客户的选择。我试过了。我曾经尝试过。

1 个答案:

答案 0 :(得分:10)

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

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