У меня есть класс bMainframe, который управляет соединениями с 4 разными мэйнфреймами. Это позволяет определенным образом открывать одну и ту же базовую неуправляемую библиотеку и одновременно подключать более одного мэйнфрейма. Каждая библиотека имеет свой собственный код утилизации для ресурса неуправляемого соединения с мэйнфреймом. Оболочка также содержит код, который вызывает код удаления отдельного соединения с мэйнфреймом.
Это приводит к ошибке, если чей-то проект не использует все 4 мэйнфрейма, но вызывает удаление в оболочке. (FileLoadException не удалось загрузить сборку X из 4 управляемых мэйнфреймов) Поскольку этот код утилизации проверяет, какие из 4 не являются ничем / null. Даже если ничего / ноль это приводит к тому, что .net пытается загрузить сборку и вылетает.
Является ли код утилизации во внешней упаковке полезным или необходимым? Есть ли способ проверить, загружена ли сборка для типа, которая не запускает .net для загрузки типа / сборки?
Я изменил код ниже, чтобы заблокировать исключение fileloadexception, но я не верю, что это лучший способ.
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: free managed resources when explicitly called
End If
Try
If Me._Linx IsNot Nothing Then
If _Linx.cnLinx IsNot Nothing Then
Try
_Linx.Disconnect()
Catch ex As Exception
Trace.WriteLine("Error doing linx.disconnectSession")
End Try
Try
_Linx.Dispose()
Catch ex As Exception
Trace.WriteLine("Error doing linx.dispose")
End Try
End If
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load LinxFile")
End Try
Try
If Me._Acaps IsNot Nothing Then
_Acaps.Disconnect()
_Acaps.Dispose()
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load AcapsFile")
End Try
Try
If Me._Dart IsNot Nothing Then
Try
_Dart.Dispose()
Catch ex As Exception
Trace.WriteLine("Error disposing of Dart")
End Try
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load DartFile")
End Try
Try
If LpsOpen Then
Try
_Lps.Dispose()
Catch ex As Exception
Trace.WriteLine("Error disposing of Lps")
End Try
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load LpsFile")
End Try
' TODO: free shared unmanaged resources
End If
Me.disposedValue = True
End Sub