vb.net - studio - ¿Cómo agregar/eliminar la referencia programáticamente?
no se puede agregar referencia.dll c# (2)
Mi aplicación está construida para escanear una base de datos de MS Access en VB.NET.
Cuando la aplicación Access se distribuye a los usuarios finales, pueden tener diferentes versiones de componentes COM. ¿Es posible agregar / eliminar referencias mediante programación para resolver referencias rotas debido a las diferentes versiones?
Por favor, comparte código o enlace para referencia.
Aquí hay un código de muestra:
Crear referencia desde archivo
Sub AddWS()
''Create a reference to Windows Script Host, ''
''where you will find FileSystemObject ''
''Reference name: "IWshRuntimeLibrary" ''
''Reference Name in references list: "Windows Script Host Object Model" ''
ReferenceFromFile "C:/WINDOWS/System32/wshom.ocx"
End Sub
Function ReferenceFromFile(strFileName As String) As Boolean
Dim ref As Reference
On Error GoTo Error_ReferenceFromFile
References.AddFromFile (strFileName)
ReferenceFromFile = True
Exit_ReferenceFromFile:
Exit Function
Error_ReferenceFromFile:
ReferenceFromFile = False
Resume Exit_ReferenceFromFile
End Function
Eliminar referencia
Sub DeleteRef(RefName)
Dim ref As Reference
''You need a reference to remove ''
Set ref = References(RefName)
References.Remove ref
End Sub
You can use the references collection to find if a reference exists.
La referencia existe
Function RefExists(RefName)
Dim ref As Object
RefExists = False
For Each ref In References
If ref.Name = RefName Then
RefExists = True
End If
Next
End Function
Desde: http://wiki.lessthandot.com/index.php/Add,_Remove,_Check_References
También puede leer http://www.mvps.org/access/modules/mdl0022.htm
La mejor solución es limitar las referencias en su Access MDB a los componentes de acceso internos. Esta sería la referencia de acceso, la referencia VBA y la referencia DAO. Todas las demás bibliotecas externas deben usarse a través del enlace tardío. Si está utilizando el objeto del sistema de archivos, por ejemplo, en lugar de esto (con una referencia al modelo de objetos de Windows Script Host):
Dim objFSO As New FileSystemObject
If objFSO.FolderExists("//d9m09521/WB/") Then
...
End If
Quitarás la referencia y la convertirás en esto:
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists("//d9m09521/WB/") Then
...
End If
Si le preocupa el impacto en el rendimiento de inicializar el FSO cada vez que lo usa, puede guardar una referencia en el mismo. Usualmente uso una variable estática dentro de una función para devolver un objeto como este:
Public Function FSO() As Object
Static objFSO As Object
If objFSO Is Nothing Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
End If
FSO = objFSO
End Function
Ahora, es posible que desee ser elegante y también ser capaz de derribar el objeto instanciado, en cuyo caso haría algo como esto:
Public Function FSO(Optional bolCloseObject As Boolean = False) As Object
Static objFSO As Object
If bolCloseObject Then
Set objFSO = Nothing
Exit Function
End If
If objFSO Is Nothing Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
End If
FSO = objFSO
End Function
En cualquier caso, el punto es que el enlace tardío resuelve la ubicación de las bibliotecas externas en tiempo de ejecución y, por lo tanto, no se romperá, excepto si la biblioteca externa no está instalada o no está registrada correctamente. Con la vinculación tardía, puede atrapar ambas condiciones, pero con la vinculación anticipada, toda la aplicación de Access simplemente se rompe.