Pregunta sobre .net – Comprobación de dependencias externas en vb.net

1

Algo que nunca antes había hecho, pero cuál es la mejor manera de asegurarse de que estén disponibles los ensamblados externos / archivos DLL que utiliza mi aplicación, y posiblemente la versión correcta.

Escribí una aplicación que se basa en System.Data.SQLite.dll, fui a probarlo en una máquina en la que faltaba ese dll, y mi aplicación simplemente lanzó una excepción de tiempo de ejecución porque faltaba el dll. ¿Cómo puedo atrapar este error?

Tu respuesta

4   la respuesta
1

(He puesto la bandera de la comunidad en este caso, porque esto se debe principalmente a mi instinto, y probablemente me he perdido un paso crucial en alguna parte)

Respuesta corta: En general, es una buena idea implementar sus dependencias junto con su aplicación, utilizando un instalador. Sin ellos, como ha notado, hay muy pocas posibilidades de que su aplicación funcione.

Respuesta larga: Ok dices que tienesextra La funcionalidad que desea proporcionar si hay algo más instalado en la máquina de destino. Aquí hay algunas pautas generales para hacerlo:

Para cualquier tipo que tenga un campo, una propiedad, un evento, un parámetro o un valor de retorno que haga referencia a un tipo definido en el ensamblaje posiblemente desinstalado: debe incluirse una interfaz y reemplazar todos los demás campos, parámetros, valores de retorno o locales. Declaraciones de variables para utilizar la interfaz.

Cada vez que vaya a construir una de las clases envueltas anteriormente, debe usar elSystem.Activator.CreateInstance y envuélvalo en un filtro try / catch en 7 tipos de excepción diferentes:

FileNotFoundExceptionFileLoadExceptionBadImageFormatExceptionTypeLoadExceptionMissingMethodExceptionMissingMemberExceptionMissingFieldException

Si se detecta uno de ellos, debe proporcionar una implementación alternativa de la interfaz creada anteriormente o escribir su código para que compruebe si está vacío en cualquier momento que haga referencia a ese objeto.

Gracias por esa explicación, usaré el código de ejemplo proporcionado por Josh, pero esta información también es muy útil. beakersoft
1

Lo que desea hacer es usar la reflexión para verificar y ver si el ensamblaje se puede cargar en la memoria. Envuélvalo en un bloque try..catch y maneje cualquiera de las excepciones específicas que provienen de él.

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

Debería interceptar el error fuera de su bucle principal.
O si desea enviar / ubicar sus propios ensamblajes, puede intentar anular el sondeo de ensamblajes:Enlazar.

0

Podría usar un proyecto de configuración para crear un instalador para su aplicación. Esto analizaría todas las dependencias estáticas y produciría un instalador que garantice que la máquina de destino obtenga todo lo que necesita.

Preguntas relacionadas