环境:C#,.NET 4.0和混合模式。
我有一个复杂的应用程序,涉及多个第三方依赖项。当我们接到一些应用程序崩溃的报告时,我们添加了一些健全性检查以确保遍历程序集依赖项时所有依赖项都存在。不幸的是,这并不能检查我们的应用程序使用的本机DLL文件的存在。我们打算的解决方案是遍历所有DLL名称,并确保至少有一个文件具有该名称作为健全性检查。
问题
Directory.EnumerateFiles()和File.Exists()也看不到这些本机DLL。重现此问题的代码与教科书中的“如何列出文件”一样简单:
foreach(string file in
Directory.EnumerateFiles(Environment.CurrentDirectory, "*.dll"))
{
string entry = Path.GetFileName(file);
if (! RequiredFiles.Contains(entry))
{
/* Do error handling */
}
}
从我列出文件的目录开始,我可以看到我想要检测的文件。它们在任何方面都没有被标记为系统文件。然而,无论我是否有过滤文本,只有.NET DLL文件被列出。我想更直接地重写代码部分,但令人沮丧的是得到了相同的结果:
foreach(string dependency in RequiredFiles)
{
string fileName = Environment.CurrentDirectory + '\\' + dependency;
if(! File.Exists(fileName))
{ /* do error handling */ }
}
我得到了完全相同的结果。所有本地DLL文件似乎对.NET不可见。
问题:
这是什么原因?更重要的是,如果我甚至无法在文件系统中看到它们,如何检测本地DLL文件是否存在?