Вопрос по .net – Проверка на внешние зависимости в vb.net

1

Что-то, чего я никогда прежде не делал, но как лучше всего убедиться, что любые внешние сборки / dll, которые использует мое приложение, доступны и, возможно, правильной версии.

Я написал приложение, основанное на System.Data.SQLite.dll, я протестировал его на компьютере, на котором отсутствовала эта dll, и мое приложение просто вызвало исключение времени выполнения, потому что dll отсутствовала. Как я могу перехватить эту ошибку?

Ваш Ответ

4   ответа
0

Вы можете использовать проект установки для создания установщика для вашего приложения. Это проанализирует все статические зависимости и создаст установщик, который гарантирует, что целевой компьютер получает все, что ему нужно.

0

Вы должны перехватить ошибку за пределами вашего основного цикла.
Или, если вы хотите отправить / найти свои собственные сборки, вы можете попробовать переопределить сборку:Ссылка на сайт.

1

Что вы хотите сделать, это использовать отражение, чтобы проверить и посмотреть, можно ли загрузить сборку в память. Оберните это в блок try..catch и обработайте все конкретные исключения, которые из него происходят.

Try
    Assembly.Load("System.Data.SQLite, Version=1.0.22.0, Culture=neutral, PublicKeyToken=DB937BC2D44FF139");
Catch ex As FileNotFoundException
    //do something here
End Try
1

(I've set the community-owned flag on this one, because this is mostly all from my gut instinct, and I've probably missed a crucial step in there somewhere)

Short answer: Обычно хорошей идеей является развертывание ваших зависимостей вместе с вашим приложением с использованием установщика. Без них, как вы заметили, очень мало шансов на работу вашего приложения.

Long answer: Хорошо, у вас естьextra функциональность, которую вы хотите предоставить, если на целевой машине установлено что-то еще. Вот некоторые общие рекомендации, чтобы сделать это:

For any type that has a field, property, event, parameter, or return-value that references a type defined in the possibly uninstalled assembly: must be wrapped with an interface, and replace all other field, parameter, return-value, or local variable declarations to use the interface.

Any time you go to construct one of the previously wrapped classes, you must use the System.Activator.CreateInstance method, and wrap it in a try/catch filtering on 7 different exception types:

FileNotFoundException FileLoadException BadImageFormatException TypeLoadException MissingMethodException MissingMemberException MissingFieldException

If one of those is caught, you must either provide an alternative implementation of the previously created interface, or write your code so that it checks for null any time it references that object.

Error: User Rate Limit Exceeded beakersoft

Похожие вопросы