-3

这是我的代码:

    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
        {
            _applicationObject = (DTE2)application;
            _addInInstance = (AddIn)addInInst;
            if (connectMode == ext_ConnectMode.ext_cm_UISetup)
            {
                object[] contextGUIDS = new object[] { };
                Commands2 commands = (Commands2)_applicationObject.Commands;

                CommandBar SECommandBar = ((CommandBars)_applicationObject.CommandBars)["Context Menus"];
                CommandBarPopup SEPopUps = (CommandBarPopup)SECommandBar.Controls["Project and Solution Context Menus"];
                CommandBarPopup ooCommandBar = (CommandBarPopup)SEPopUps.Controls["Project"];
                CommandBarPopup oCommandBar = (CommandBarPopup)SEPopUps.Controls["Item"];



                CommandBarControl oControl = (CommandBarControl)
                  oCommandBar.Controls.Add(MsoControlType.msoControlButton,
                  System.Reflection.Missing.Value,
                  System.Reflection.Missing.Value, 1, true);
                // Set the caption of the menuitem
                oControl.Caption = "Create Documentation";

                oSubMenuItemHandler = _applicationObject.Events.get_CommandBarEvents(oControl) as CommandBarEventsClass;
                oSubMenuItemHandler.Click += new _dispCommandBarControlEvents_ClickEventHandler(oSubMenuItemHandler_Click);


            }
        }

 public void oSubMenuItemHandler_Click(object CommandaBarControl, ref bool handled, ref bool cancelDefault)
        {
SelectedItems doc = _applicationObject.SelectedItems;
// i want to get type of selected Class
}

我可以做这样的事情。任何人都可以帮助我访问所选类的类型以进行反射并获取所有方法和属性

4

2 回答 2

3

CS文件名与其中存在的类型没有任何关系。

这不是Java编译器假装每个文件有一个类,并且类命名为文件本身的地方(如果我没记错的话)。

所以,不,你不能在C#.

如果您需要读取C#编码文件,您可以使用Roslyn为您制作:

  • 读取文件
  • 构建AST
  • 返回给您在该文件中键入的内容。

可以看看这里读取一个 .cs 文件,将属性添加到类,写回 .cs 文件以获取具体示例。

于 2013-08-21T09:33:01.910 回答
0

为此,您必须以编程方式编译 .cs 文件,这不是一项小任务。

有一篇不错的 msdn 文章:“如何使用 C# 编译器以编程方式编译代码”

编译后,您可以使用反射从生成的程序集中获取类型:“Assembly.GetTypes Method”

于 2013-08-21T09:56:38.270 回答