Introduction
Many of you are not aware of it in depth, mainly the freshers who just started getting their hands dirty with the light of Silver. In this post, I am going to describe the AppManifest.xaml file and its 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. I appreciate your 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, 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.
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 that 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 to 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 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 these 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 them 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.
I 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 feedback at the end of the post.