You need to determine each assembly imported by a particular assembly. This information can show you if this assembly is using one or more of your assemblies or if your assembly is using another specific assembly. Obtaining the imported types in an assembly is useful, greatly aid in learning to use a new assembly and also help determine dependencies between assemblies for shipping purposes. To obtain the imported assemblies of an assembly, you can use the GetReferencedAssemblies method of System.Reflection.Assembly.
The GetReferencedAssemblies method of the System.Reflection.Assembly class obtains a list of all the imported assemblies. This method accepts no parameters and returns an array of AssemblyName objects instead of an array of Types. The AssemblyName type is made up of members that allow access to the information about an assembly, such as the name, version, culture information, public/private key pairs, and other data.
Following is the sample method:
using System; using System.Reflection; using System.Collections.Specialized; public static void BuildDependentAssemblyList(string path, StringCollection assemblies) { // maintain a list of assemblies the original one needs if (assemblies == null) assemblies = new StringCollection(); // have we already seen this one? if (assemblies.Contains(path) == true) return; Assembly asm = null; // look for common path delimiters in the string // to see if it is a name or a path if ((path.IndexOf(@"\", 0, path.Length) != -1) || (path.IndexOf("/", 0, path.Length) != -1)) { // load the assembly from a path asm = Assembly.LoadFrom(path); } else { // try as assembly name asm = Assembly.Load(path); } // add the assembly to the list if (asm != null) { assemblies.Add(path); } // get the referenced assemblies AssemblyName[] imports = asm.GetReferencedAssemblies(); // iterate foreach (AssemblyName asmName in imports) { // now recursively call this assembly to get the new modules // it references BuildDependentAssemblyList(asmName.FullName, assemblies); } }
This code fills a StringCollection containing the original assembly, all imported assemblies, and the dependent assemblies of the imported assemblies. Note that this method does not account for assemblies loaded using the Assembly.Load* methods, as it is only inspecting for compile-time references.
Popularity: 2% [?]
RSS feed for comments on this post · TrackBack URI
Leave a reply