如何快速获得.net程序引用的程序集

如何快速获得.net程序引用的程序集,第1张

1,在vs2005中新建一个工程,如testtools,项目类型选择windows应用程序

2,在windows form上面拖入一个文件浏览的botton,和一个文本框,然后在botton的事件上面录入如下代码:

/// <summary>

        /// 浏览按钮

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void button1_Click(object sender, EventArgs e)

        {

            this.openFileDialog1.Filter="可执行文件|*.exe"

            this.openFileDialog1.ShowDialog()

            this.textBox1.Text = this.openFileDialog1.FileName.Trim()

            if (this.textBox1.Text.Trim() == string.Empty)

            {

                MessageBox.Show("选择文件,文件类型为dll或者exe", "数慧测试平台")

                return

            }

           return

        }

3,在windows form上面拖入普通的botton,然后在botton的事件上面录入如下代码:

/// <summary>

        /// 获取引用列表

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void button2_Click(object sender, EventArgs e)

        {

            if (this.textBox1.Text.Trim() == string.Empty)

            {

                MessageBox.Show("请先选择文消仿件", "数慧测试平台")

                return

            }

           

            if (this.radioButton1.Checked == true)

            {

             //这里将程序引用信息写入到txt中,读者可以自定义。

                TestLogManager testlog = new TestLogManager()

                StreamWriter swriter = testlog.getStreamwriter(Application.StartupPath + "//安装测试//" + "程序引用日志.txt")

                swriter.WriteLine("引用dll名称/t" + "版本/t" + "公钥")

                

               衫桥烂 

                IList<string> pList = new List<string>()

                ArrayList pList2 = new ArrayList()

                try

                {

                    Assembly asscembly = Assembly.LoadFile(this.textBox1.Text.Trim())//装载程序集

                    GetAssemblysRecurse(asscembly, pList, pList2)

                    //对输出结果进行排序

                    pList2.Sort(new myReverserClass())

                    foreach (AssemblyName pAssemblyNameReferenced in pList2)

             或漏       {

                        // 获得程序引用的名称

                        swriter.WriteLine("" + pAssemblyNameReferenced.Name + "/t" + pAssemblyNameReferenced.Version + "/t" + pAssemblyNameReferenced.KeyPair)

                    }

                }

                finally

                {

                    swriter.Close()

                }

                MessageBox.Show("完成!" + "请查看:" + Application.StartupPath + "//安装测试//程序引用日志.txt", "数慧测试平台")

                return

            }

            else

            {

                return

            }

        }

        /// <summary>

        /// 排序方法

        /// </summary>

        public class myReverserClass : IComparer

        {

            int IComparer.Compare(object x, object y)

            {

                return (x as AssemblyName).Name.CompareTo((y as AssemblyName).Name)

            }

        }

        /// <summary>

        /// 递归函数,递归获得程序集合名称,然后写入日志中。

        /// </summary>

        /// <param name="swriter"></param>

        /// <param name="asscembly"></param>

        /// <param name="pList"></param>

        private void GetAssemblysRecurse(Assembly asscembly, IList<string> pList, ArrayList pList2)

        {

            AssemblyName[] assemblyname = asscembly.GetReferencedAssemblies()//获得引用程序集

            foreach (AssemblyName pAssemblyNameReferenced in assemblyname)

            {

                Assembly pAssemblyReferenced = null

                //先从公共的Assembly中检查是否存在相应的dll,如:C:/WINDOWS/assembly

                try

                {

                    pAssemblyReferenced = Assembly.Load(pAssemblyNameReferenced)

                }

                catch (Exception)

                {

                }

                //从可执行的exe下面检查是否存在相应的dll

                if (pAssemblyReferenced == null)

                {

                    try

                    {

                        

                        pAssemblyReferenced = Assembly.LoadFile(Path.GetDirectoryName(this.textBox1.Text.Trim()) +

                            Path.DirectorySeparatorChar + pAssemblyNameReferenced.Name + ".dll")

                    }

                    catch (Exception)

                    {

                    }

                }

                //如果存在引用的dll,然后判断是否为系统的dll。

                if (pAssemblyReferenced != null)

                {

                    if (pAssemblyNameReferenced.Name.IndexOf("Test_ms") > -1 ||

                        pAssemblyNameReferenced.Name.IndexOf("Test_System") > -1||

                        pAssemblyNameReferenced.Name.IndexOf("test_office") > -1||

                        pAssemblyNameReferenced.Name.IndexOf("test_Interop") > -1)

                    {

                        continue

                    }

                    //如果plist中不存在,则添加。

                    if (pList.IndexOf(pAssemblyNameReferenced.Name) == -1)

                    {

                        pList.Add(pAssemblyNameReferenced.Name)                                     

                       //将程序集添加到plist2中,plist2主要是用来排序。

                        pList2.Add(pAssemblyNameReferenced)

                        //执行递归方法

                        GetAssemblysRecurse(pAssemblyReferenced, pList, pList2)

                    }

                }

            }

        }

4,编译工程,然后执行exe即可获得引用的程序集列表。

您好!易迅厅语言可以通过使用.NET框架提供的反射机制来调用其他程序集中的变量。具体步骤如下:

1. 引用程序集:在易语言中,通过使用.NET框架提供的Assembly类来引用其他程序集。可以使用Assembly类的LoadFile方法来加载程序集文件,然后使用Assembly类的GetType方法获取程序集中的类型。

2. 获取变量:获取程序集中的变量可以使用Type类的GetField或GetProperty方法。这些方法可以根据变量名称获取变量信息。

3. 调用变量:获取变量信息后,可以使用GetValue方法获取变量的值。如果变量是静态的,则可以直接使散纳用Type类的InvokeMember方法调用变量。

需要注意的是,调用其他程序集中的变量需要确保程序集已经被正确加载,并亩掘隐且变量的访问权限符合要求。

希望这个回答能够帮助您!

assembly n. 装配;集会,集合,组装

reference n. 参考,参照;盯空涉及,提及;参考书目;介绍信;证凯明瞎明书

所以,你问的词语意思是:组装参考书槐数


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12329089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存