Загрузка неуправляемой библиотеки .NET: обработка состояний ошибки

#.net #exception-handling #unmanaged

#.net #исключение #неуправляемый

Вопрос:

Я пишу программу, которая использует неуправляемую библиотеку. Какова наилучшая практика для обработки ситуации, когда доступный foo.библиотека dll имеет несовместимую версию?

Примеры: Пользователь запускает программу и имеет более старую версию DLL, чем та, которую ожидает программа. Вы бы попытались использовать это в любом случае, поскольку изменения API, нарушающие работу, должны быть редкостью в зрелой библиотеке? Немедленно выдается ошибка? Поддерживать ресурс в программе с указанием мест загрузки для каждой используемой неуправляемой библиотеки DLL? Или считается лучшим включить каждую библиотеку DLL в отдельную папку проекта и настаивать на использовании именно этого файла?

На данный момент я делаю последнее и обновляю DLL новыми версиями проекта, но я хотел бы, чтобы мое программное обеспечение было настолько отказоустойчивым, насколько это практически возможно, и я не знаю никаких рекомендаций по использованию неуправляемых DLL (кроме «не используйте их, если в этом нет необходимости»).

Ответ №1:

Предполагая, что неуправляемая DLL содержит информацию о версии, встроенную при компиляции, вы могли бы использовать класс FileVersionInfo в System.Диагностика при загрузке приложения для проверки совместимых версий.

Если совместимые версии не найдены, то предупредить пользователя?

http://msdn.microsoft.com/en-us/library/system.diagnostics .fileversioninfo.aspx

Комментарии:

1. Мне следовало быть более ясным — проблема не в том, чтобы найти версию DLL. Вопрос был скорее о наилучшей практике, чем о конкретной реализации. Например, можно ли создать исключение и, если да, то какое исключение (пользовательское?). Я пытаюсь разобраться с лучшими практиками, но не смог найти хорошую статью об обработке некоторых ситуаций при работе с неуправляемыми библиотеками.