LoganLehman

Using third-party assemblies within my Add-In (Custom Control)

Discussion created by LoganLehman on Mar 14, 2012
Hi,

I have created a custom design-time .NET control to use within my add-in (MultiColumn ComboBox). I have tried multiple methodologies to embed it within my ArcMap Add-In assembly. You can see here[SUP]1[/SUP] that I am currently trying to use an AssemblyResolve event to try to resolve the embedded resource stream, but maybe I am not implementing it correctly within the Arc Framework. If someone could point me in the right direction, that would be very helpful.


[SUP]1[/SUP]
Public Module Core

Private _initialized As Boolean

Public Sub EnsureInitialized()
  If Not _initialized Then
    AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf AssemblyResolve
    _initialized = True
  End If
End Sub

Private Function AssemblyResolve(ByVal sender As Object, ByVal e As ResolveEventArgs) As Assembly
  Dim resourceFullName As String = String.Format("[CONTAINER ASSEMBLY].{0}.dll", e.Name.Split(","c)(0))
  Dim thisAssembly As Assembly = Assembly.GetExecutingAssembly()
  Using resource As Stream = thisAssembly.GetManifestResourceStream(resourceFullName)
    If resource IsNot Nothing Then Return Assembly.Load(ToBytes(resource))
    Return Nothing
  End Using
End Function

Private Function ToBytes(ByVal instance As Stream) As Byte()
    Dim capacity As Integer = If(instance.CanSeek, Convert.ToInt32(instance.Length), 0)

    Using result As New MemoryStream(capacity)
        Dim readLength As Integer
        Dim buffer(4096) As Byte

        Do
            readLength = instance.Read(buffer, 0, buffer.Length)
            result.Write(buffer, 0, readLength)
        Loop While readLength > 0

        Return result.ToArray()
    End Using
End Function

End Module

Outcomes