完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
    * 主體類型
    * 企業(yè)名稱
    * 信用代碼
    * 所在行業(yè)
    * 企業(yè)規(guī)模
    * 所在職位
    * 姓名
    * 所在行業(yè)
    * 學(xué)歷
    * 工作性質(zhì)
    請(qǐng)先選擇行業(yè)
    您還可以選擇以下福利:
    行業(yè)福利,領(lǐng)完即止!

    下載app免費(fèi)領(lǐng)取會(huì)員

    NULL

    ad.jpg

    二次開發(fā)教程:Revit開發(fā)AddinManager原理探索

    發(fā)布于:2019-08-26 16:07:33

    網(wǎng)友投稿

    更多

    Revit開發(fā)中AddinManager是一個(gè)非常好用的工具,它可以快速的運(yùn)行我們寫好的命令


    并且生成addin文件,最近突然好奇,它是怎么實(shí)現(xiàn)這些功能的,然后研究了一下,


    發(fā)現(xiàn)這里面似乎是通過反射來實(shí)現(xiàn)的,他能運(yùn)行我們的寫的命令最關(guān)鍵的是因?yàn)橄旅娴拇a


                 IExternalCommand externalCommand = assembly.CreateInstance(FullClassName) as IExternalCommand;

                if (externalCommand != null)

                {

                    result = externalCommand Execute( commandData, ref message,  elements)

                }          




    因?yàn)橛梅瓷鋭?chuàng)建我們寫的命令的類之前,我們要先加載dll,而加載dl后,如果加載dll的位置和我們生成dll的位置相同


    當(dāng)我們?cè)倬幾g原來的工程就會(huì)失敗,因?yàn)槲覀兩傻膁ll要替換原來的dll,而原來的dll已經(jīng)被占用,所有就會(huì)替換失敗,


    我想著就是AddInManager 運(yùn)行命令之前,要先把dll文件復(fù)制到其他地方的原因吧




    下面嘗試些一個(gè)簡單的AddInManager,并不包括將dll復(fù)制到其他地方,和生成addin文件的功能




       //創(chuàng)建界面


        public class MyApp:IExternalApplication

        {

            public Result OnShutdown(UIControlledApplication application)

            {

                return Result.Succeeded;

            }

            public Result OnStartup(UIControlledApplication application)

            {

                RibbonPanel panel = application.CreateRibbonPanel(Tab.AddIns, "NewAddInManager");

                PushButtonData data = new PushButtonData("NewAddinManager", "MyCommand", this.GetType().Assembly.Location, "NewAddinManager.MyAddInCommand");

                panel.AddItem(data);

                return Result.Succeeded;

            }

        }


    // addinManager 命令


        public class MyAddInCommand : IExternalCommand

        {

            public string path = null;

            public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

            {

                AppDomain.CurrentDomain.AssemblyResolve += LoadAssemble;

                Result result;

                OpenFileDialog dialog = new OpenFileDialog();

                if (dialog.ShowDialog() == DialogResult.OK)

                {

                    string file = dialog.FileName;

                    path = new FileInfo(file).DirectoryName;

                    Assembly ab = Assembly.LoadFile(file);

                    foreach (Type tp in ab.DefinedTypes)

                    {

                        IExternalCommand icmd = ab.CreateInstance(tp.FullName) as IExternalCommand;

                        if (icmd != null)

                        {

                            result = icmd.Execute(commandData, ref message, elements);

                            break;

                        }

                    }

                }

                return Result.Succeeded;

            }



            private Assembly LoadAssemble(object sender, ResolveEventArgs args)

            {        

                string dllName = args.Name.Split(new char[] { ',' }).First();

                Assembly tab = args.RequestingAssembly;        

                FileInfo fileInfo = new FileInfo(tab.Location);

                DirectoryInfo dir = fileInfo.Directory;// new DirectoryInfo(path);

                FileInfo[] files = dir.GetFiles("*.dll", SearchOption.TopDirectoryOnly);

                foreach (FileInfo f in files)

                {               

                    if (f.Name.Contains(dllName))

                    {

                        Assembly ab = Assembly.LoadFile(f.FullName);

                        return ab;

                    }

                }           

                return null;

            }

        }

    本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

    未標(biāo)題-1.jpg

    上一篇:二次開發(fā)教程:Revit開發(fā)之梁柱分段

    下一篇:二次開發(fā)教程:Revit開發(fā)之AddInManager安裝包簡單制作

    60acb4e0ef112.png
    主站蜘蛛池模板: 无码人妻一区二区三区一| 一区二区三区免费在线视频| 国产一区二区精品久久岳√| 亚洲欧美日韩国产精品一区 | 精品一区二区三区免费毛片| AV无码精品一区二区三区宅噜噜| 国产在线一区二区| 精品一区二区三区四区电影| 中文字幕视频一区| 不卡一区二区在线| 日本一区中文字幕日本一二三区视频| 国模吧无码一区二区三区| 亚洲av成人一区二区三区在线播放| 国产一区二区三区免费视频 | 中文字幕一区在线| 国产乱码精品一区二区三区中| 精品人妻少妇一区二区三区不卡 | 精品一区二区三区在线观看视频| 日本福利一区二区| 亚洲福利一区二区精品秒拍| 国产成人精品亚洲一区| 午夜影视日本亚洲欧洲精品一区| 一区二区三区免费精品视频 | 人妻精品无码一区二区三区| 一区二区视频在线| 国产亚洲一区二区三区在线| 免费国产在线精品一区| 国精产品一区一区三区有限公司| 精品一区二区三区波多野结衣| 一区二区三区人妻无码 | 亚洲色婷婷一区二区三区| 在线观看视频一区二区| 国产精品视频一区二区三区| 日产精品久久久一区二区| 久久久久久综合一区中文字幕| 久久国产精品免费一区二区三区| 日韩精品一区二区三区影院 | 免费无码一区二区三区蜜桃大 | 久久精品国内一区二区三区| 日韩精品人妻一区二区三区四区 | 国产亚洲一区二区手机在线观看|