Export (0) Print
Expand All

How to: Load Assemblies On Demand

Silverlight

The following example code demonstrates how to retrieve an assembly from the host server on demand, and then load it into the current application domain.

This example uses the WebClient class to initiate an asynchronous download of the assembly in response to a user mouse click. When the download is complete, the AssemblyPart class is used to load the assembly.

This example assumes that you have added a reference to the assembly in your application project. The assembly must also have a Copy Local value of False so that it will not be deployed in the application package. For more information, see Application Structure.

You can use this technique to load assemblies that are not referenced in your application project. In this case, however, you must use reflection to instantiate types from the loaded assembly. For more information, see Assembly.

The following example loads an assembly called SilverlightLibrary.dll when the user clicks a text block. This example uses a relative URI to load the assembly from the same location as the application XAP file.


<UserControl x:Class="SilverlightApplication.HomePage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid Background="SandyBrown">
        <StackPanel x:Name="stackPanel">
            <TextBlock>Page from Host Application</TextBlock>
            <TextBlock 
                MouseLeftButtonUp="TextBlock_MouseLeftButtonUp"
                Cursor="Hand">
                Click Here to Display a UI from the Library Assembly
            </TextBlock>
        </StackPanel>
    </Grid>


</UserControl>



Imports SilverlightLibrary

Partial Public Class HomePage
    Inherits UserControl

    Public Sub New()
        InitializeComponent()
    End Sub

    Private Sub TextBlock_MouseLeftButtonUp(ByVal sender As Object, _
        ByVal e As MouseButtonEventArgs)

        ' Download an "on-demand" assembly. 
        Dim wc As New WebClient()
        AddHandler wc.OpenReadCompleted, AddressOf wc_OpenReadCompleted
        wc.OpenReadAsync(New Uri("SilverlightLibrary.dll", UriKind.Relative))

    End Sub

    Private Sub wc_OpenReadCompleted(ByVal sender As Object, _
        ByVal e As OpenReadCompletedEventArgs)

        If (e.[Error] Is Nothing) AndAlso (e.Cancelled = False) Then

            ' Convert the downloaded stream into an assembly that is 
            ' loaded into current AppDomain. 
            Dim assemblyPart As New AssemblyPart()
            assemblyPart.Load(e.Result)

            DisplayPageFromLibraryAssembly()

        End If

    End Sub

    Private Sub DisplayPageFromLibraryAssembly()

        ' Create an instance of the Page class in the library assembly. 
        Dim page As New Page()

        ' Display the new Page. 
        Me.stackPanel.Children.Add(page)

    End Sub

End Class


To view a running version of this example, click the following link.

 

Run this sample

Community Additions

ADD
Show:
© 2014 Microsoft