kunal-chowdhury.com

What is AppManifest.xaml in Silverlight?


Many of you don't aware of it in depth, mainly the freshers who just started doing their hands dirty with the light of Silver. In this post I am going to describe you about AppManifest.xaml file and it's uses in depth. Read the complete post to know more about it.

 

Don't forget to leave your feedback and/or any queries at the end of this post. Appreciate for reading this post.

 

 

The AppManifest.xaml file contains the deployment details needed to run the Silverlight application. The first element of it starts with a Deployment node which defines the Assembly information, Runtime version, Application Entry point and the assembly, extension parts.

 

You can find the complete AppManifest.xaml file inside the .XAP file. It is also available in the Silverlight project's Properties folder (named as "AppManifest.xml"), but you will find it almost empty there. Once you build your project, it gets generated by the IDE and placed inside your XAP file.

 

To find out it, build your solution and go to your Client Bin folder. Open your .XAP with a Zip utility. If you are unable to open that file, rename it to .Zip extension. You will be able to open now.

 

image

 

 

Once you open the AppManifest.xaml file, you will see the following code there:

 

 
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
            EntryPointAssembly="AppManifestDemo1" 
            EntryPointType="AppManifestDemo1.App"
            RuntimeVersion="4.0.50826.0">
  <Deployment.Parts>
    <AssemblyPart x:Name="AppManifestDemo1" Source="AppManifestDemo1.dll" />
  </Deployment.Parts>
</Deployment>

 

 

The root element is the Deployment node. It defines the Entry Point Assembly, Entry Point Type (basically the main application class name with full namespace) and the Silverlight Runtime Version.

 

This node contains the Deployment.Parts and/or Deployment.ExternalParts as the child. The Deployment.Parts defines the Assembly Parts those are referenced in the project and present in the .XAP file. It also defines the main output dll as the Assembly part. As shown in the above figure, we have only one assembly in our XAP (the main project output) and hence only one entry in the AppManifest.xaml file.

 

Let's add some more external dependencies in our project. Build it and open the XAP once again. Now you will see that in our latest xap, we have the external assemblies too (as highlighted below).

 

 

 

If you open the AppManifest.xaml file now, you will notice that, it contains those dlls as Assembly Parts in the Deployment.Parts section.

 
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
            EntryPointAssembly="AppManifestDemo1" 
            EntryPointType="AppManifestDemo1.App" 
            RuntimeVersion="4.0.50826.0">
  <Deployment.Parts>
    <AssemblyPart x:Name="AppManifestDemo1" Source="AppManifestDemo1.dll" />
    <AssemblyPart x:Name="SilverlightClassLibrary1" Source="SilverlightClassLibrary1.dll" />
    <AssemblyPart x:Name="System.Json" Source="System.Json.dll" />
  </Deployment.Parts>
</Deployment>

 

 

Now let's discuss on the Deployment.ExternalParts section. You will find this section if you have enabled the Application Library Caching. Enable the Application Library Caching in your project as shown in this post. Now build your solution once again. You will not see those external assemblies in your XAP now. They will be part of separate .Zip files placed inside your Client Bin directory.

 

Open your AppManifest.xaml file and you will see the below changes:

 
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
            EntryPointAssembly="AppManifestDemo1" 
            EntryPointType="AppManifestDemo1.App" 
            RuntimeVersion="4.0.50826.0">
  <Deployment.Parts>
    <AssemblyPart x:Name="AppManifestDemo1" Source="AppManifestDemo1.dll" />
    <AssemblyPart x:Name="SilverlightClassLibrary1" Source="SilverlightClassLibrary1.dll" />
  </Deployment.Parts>
  <Deployment.ExternalParts>
    <ExtensionPart Source="System.Json.zip" />
  </Deployment.ExternalParts>
</Deployment>

 

 

You will notice that, it removed the external dependencies from the deployment part section and added it inside the deployment external part section. Also notice that, it's not referencing the dll, instead it is pointing to the zip file that has been created by the IDE in the Client Bin directory.

 

Hope this helped you to understand the AppManifest file of your Silverlight application. Let me know, if you have any queries. Also, don't forget to share your thoughts and/or feedbacks at the end of the post.



Kunal Chowdhury
If you have come this far, it means that you liked what you are reading (What is AppManifest.xaml in Silverlight?).
Why not reach little more and connect with me directly on Twitter, Facebook, Google+ and LinkedIn. I would love to hear your thoughts and opinions on my articles directly.

Don't forget to share your feedback/queries in the comment section below.