如何访问 Visual Studio DTE 插件程序集
How to access a Visual Studio DTE Addin assembly
这是我正在尝试做的事情:
- 创建加载 Visual Studio DTE
的可执行文件
- 加载的插件的访问方法
这是我的代码,大致遵循 this blog。
[STAThread]
static void Main(string[] args)
{
EnvDTE80.DTE2 dte;
object obj = null;
System.Type t = null;
MessageFilter.Register();
// Get the ProgID for DTE 10.0.
t = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0", true);
obj = System.Activator.CreateInstance(t, true);
var addin = GetAddInByProgID(dte, "MyAddin");
if (addin != null)
{
addin.Connected = true;
var connectObj = addin.Object;
var conObjType = connectObj.GetType();
var methods = conObjType.GetMethods(); // mscorlib methods
var asm = conObjType.Assembly; // is mscorlib
}
...
}
我 运行 遇到的问题是我无法访问 Addin 的程序集。 conObjType
的程序集似乎是 mscorlib - 但我想访问 Myaddin.dll。有什么想法吗?
除了实现插件接口(OnConnection 等)所需的方法外,任何第 3 方插件都不能公开任何方法。它的方法可以是内部的(不是public)甚至可以被混淆。
如果它是您的加载项,更好的方法是加载项提供执行操作的命令,并且给定您的外部 DTE 实例,您可以调用 DTE.ExecuteCommand("MyAddIn.MyCommand" ).
这是我正在尝试做的事情:
- 创建加载 Visual Studio DTE 的可执行文件
- 加载的插件的访问方法
这是我的代码,大致遵循 this blog。
[STAThread]
static void Main(string[] args)
{
EnvDTE80.DTE2 dte;
object obj = null;
System.Type t = null;
MessageFilter.Register();
// Get the ProgID for DTE 10.0.
t = System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0", true);
obj = System.Activator.CreateInstance(t, true);
var addin = GetAddInByProgID(dte, "MyAddin");
if (addin != null)
{
addin.Connected = true;
var connectObj = addin.Object;
var conObjType = connectObj.GetType();
var methods = conObjType.GetMethods(); // mscorlib methods
var asm = conObjType.Assembly; // is mscorlib
}
...
}
我 运行 遇到的问题是我无法访问 Addin 的程序集。 conObjType
的程序集似乎是 mscorlib - 但我想访问 Myaddin.dll。有什么想法吗?
除了实现插件接口(OnConnection 等)所需的方法外,任何第 3 方插件都不能公开任何方法。它的方法可以是内部的(不是public)甚至可以被混淆。
如果它是您的加载项,更好的方法是加载项提供执行操作的命令,并且给定您的外部 DTE 实例,您可以调用 DTE.ExecuteCommand("MyAddIn.MyCommand" ).