第1章、建立一个最简单的Addin应用程序


第一章、建立一个最简单的Addin应用程序

本章将带领您从零开始一步步建立一个最简单的Hello World应用程序,该程序能够在Mstn中装载运行。

1、启动VS2015。

2、在VS2015中选菜单File > New > Project或直接按快捷键Ctrl+Shift+N弹出如下窗体。在该窗体左侧点击Visual C#,右侧点击Class Library。然后选取工程路径并输入工程名,最后在点击OK按钮前要确认.NET Framework设置为4.6.1!

【注】:在新版的VS中,Class Library可能会有多个可选项,我们的项目一定要选择.NET Framework类型的,如下图所示:

现在,点击OK按钮会出现如下界面。左侧是自动生成的C#代码,右侧是Solution Explorer (解决方案浏览器)窗体。

3、选择菜单项:Project->csAddins Properties…打开项目属性窗体。在Build(生成)页面下的Output path一项后点击Browse…按钮,浏览到您Mstn下的mdlapps文件夹。我的机器Mstn是安装在默认路径下的,所以该路径设置为C:\Program Files\Bentley\MicroStation CONNECT Edition\MicroStation\Mdlapps\。(如果您的Addins DLL文件不是生成到了这个mdlapps文件夹下而是生成到了你自己指定的一个文件夹下,要想在Mstn中加载它的话就需要设置配置变量MS_ADDINPATH指向你指定的这个路径。)

4、修改项目中的引用。在本步骤中我们将引用今后开发过程中用的比较频繁的.Net库(注:.Net加载DLL的机制是按需加载。.Net在加载我们的DLL时并不会同时把我们的DLL依赖的所有DLL都加载进来,而是在执行到引用其他DLL中的对象的代码时才会加载相应的DLL。所以即使我们的项目引用了很多.Net库,但是如果没有使用到库中的对象时是不会加载多余的DLL的。即使是使用了,如果线程没有运行到对应的代码的话也不会加载)。


4.1、在解决方案浏览器中右击引用(引用),在弹出的菜单中选Add Reference...,按下图所示找到System.Windows.Forms库。点击OK按钮。我们后续代码中的MessageBox类需要这个库。

4.2、在以上窗体中单击“Browse”按钮,分别浏览到如下列出的动态链接库并添加它们。

…\MicroStation\Bentley.DgnDisplayNet.dll

…\MicroStation\Bentley.DgnPlatformNET.dll

…\MicroStation\Assemblies\ECFramework\Bentley.EC.Persistence3.dll

…\ MicroStation\Assemblies\ECFramework\Bentley.ECObjects.Interop3.dll

…\MicroStation\Assemblies\ECFramework\Bentley.ECObjects3.dll

…\MicroStation\Assemblies\ECFramework\Bentley.ECSystem3.dll

…\MicroStation\Assemblies\ECFramework\Bentley.General.1.0.dll

…\MicroStation\Bentley.GeometryNET.dll

…\MicroStation\Bentley.GeometryNET.Common.dll

…\MicroStation\Bentley.GeometryNET.Structs.dll

…\MicroStation\Assemblies\Bentley.Interop.MicroStationDGN.dll

…\MicroStation\Assemblies\Bentley.MicroStation.dll

…\MicroStation\Assemblies\Bentley.MicroStation.Interfaces.1.0.dll

…\MicroStation\Assemblies\Bentley.MicroStation.Ribbon.dll

…\MicroStation\Assemblies\Bentley.MicroStation.WPF.dll

…\MicroStation\Assemblies\ECFramework\Bentley.Platform.dll

…\MicroStation\Assemblies\ECFramework\Bentley.UI.dll

…\MicroStation\Assemblies\ECFramework\Bentley.Windowing.dll

…\MicroStation\ustation.dll

【注】:如果仅仅是实现能在MicroStation中加载程序并显示一个Hello World的对话框的话,其实仅仅引用以上最后一个DLL(即ustation.dll)即可。Bentley.MstnPlatfomNet.Addin对象就包含在这个ustation.dll文件中。但为了今后程序的各种扩展,包含以上所有DLL会使得您今后的编程工作不用再过多地去关心还要添加哪些DLL。

最终的引用列表如下图所示:

5、这一步不是必需的,不过最好这么做一下。在解决方案浏览器中右击Class1.cs并在弹出的菜单中选择Rename(改名),随后将Class1.cs改成MyAddin.cs。当出现如下提示框时请选择Yes。

6、将MyAddins.cs的源代码修改成如下所示:

using Bentley.MstnPlatformNET;          
using System.Windows.Forms;   

namespace csAddins
{
    //每个Addin项目必须且只包含一个从Bentley.MstnPlatformNET.AddIn派生下来的class,同时必须实现其纯虚成员函数Run
    internal sealed class MyAddin : AddIn
    {
        public static MyAddin Addin = null;

        //此构造函数是我们的程序集加载时第一个被执行的函数
        private MyAddin(System.IntPtr mdlDesc) : base(mdlDesc)
        {
            Addin = this;
        }

        //Run函数是构造函数执行完以后第一个被执行的函数,有点类似与NativeCode项目中的Main函数
        protected override int Run(string[] commandLine)
        {
            MessageBox.Show("Hello World!");
            return 0;
        }
    }
}

要使一个.NET程序集能够作为Addins在Mstn下运行,需要满足如下三个条件:①包含有一个派生于Bentley.MstnPlatformNET.Addin的类;②该派生类必须提供一个单参数(IntPtr类型的MDL描述符)的构造函数,且该构造函数需要链接到基类构造函数上;③该派生类必须覆盖Addin基类中的虚方法Run()。以上对MyAddin类的定义正是满足了这三个基本条件。

7、选VS菜单Build > Build Solution来生成本解决方案。当你在VS的输出窗口中看到如下信息时表明您已经成功地创建了一个Mstn Addin。如果您不幸看到的是0 succeeded, x failed消息,则需要您仔细检查以上各步操作。查看输出窗口中的错误描述也会有助于您发现问题所在。
                              ========== Build All: 1 succeeded, 0 failed, 0 skipped ==========

8、现在来验证我们的Addin程序。请启动Mstn,点击如下图所示的图标打开key-in窗口(或通过F9快捷键打开),在键入域中键入MDL LOAD csAddins并回车,此时应该能看到一个写着“Hello World!”的消息框弹出来。至此,我们已经向您介绍了建立一个最简单的Addin的所有步骤。