#.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. Вопрос был скорее о наилучшей практике, чем о конкретной реализации. Например, можно ли создать исключение и, если да, то какое исключение (пользовательское?). Я пытаюсь разобраться с лучшими практиками, но не смог найти хорошую статью об обработке некоторых ситуаций при работе с неуправляемыми библиотеками.