Среда: 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, если я даже не вижу их в файловой системе?