.NET DLL references/dependency checking utility

前端 未结 5 1877
执笔经年
执笔经年 2020-12-13 19:00

With Visual Studio, I can see the dll references as the attached picture as an example. With this reference information, I can open the (from the example) Composition projec

5条回答
  •  青春惊慌失措
    2020-12-13 19:39

    This code will do a fairly good job at finding all the references. "temp" will be a dump of all the references it traced.

        private void PerformReferenceAnalysis()
        {
            StringBuilder builder = new StringBuilder();
            HashSet loadedAssemblies = new HashSet();
            PerformReferenceAnalysis(System.Reflection.Assembly.GetExecutingAssembly(), builder, string.Empty, loadedAssemblies);
            string temp = builder.ToString();
        }
    
        private void PerformReferenceAnalysis(System.Reflection.Assembly assembly, StringBuilder builder, string leadingWhitespace, HashSet loadedAssemblies)
        {
            if (builder.Length > 0)
            {
                builder.AppendLine();
            }
            builder.Append(leadingWhitespace + assembly.FullName);
            System.Reflection.AssemblyName[] referencedAssemblies = assembly.GetReferencedAssemblies();
            foreach (System.Reflection.AssemblyName assemblyName in referencedAssemblies)
            {
                if (loadedAssemblies.Contains(assemblyName.Name))
                {
                    continue;
                }
                loadedAssemblies.Add(assemblyName.Name);
                System.Reflection.Assembly nextAssembly;
                try
                {
                    nextAssembly = System.Reflection.Assembly.ReflectionOnlyLoad(assemblyName.FullName);
                }
                catch (Exception)
                {
                    try
                    {
                        nextAssembly = System.Reflection.Assembly.ReflectionOnlyLoad(assemblyName.Name);
                    }
                    catch (Exception)
                    {
                        nextAssembly = null;
                    }
                }
                if (nextAssembly != null)
                {
                    PerformReferenceAnalysis(nextAssembly, builder, leadingWhitespace + "| ", loadedAssemblies);
                }
            }
        }
    

提交回复
热议问题