我在VS 2010中使用Addin,在VS 2012中使用VS Package(vsix)。 Addin和VSPackage使用公共库。
我需要检测库代码(执行时间)是否由Addin OR VSPackage执行。
现在,我有这段代码,但总是适用于Addin AND VSPackage
public static bool VSAddinVSPackageMode
{
get { return (System.Diagnostics.Process.GetCurrentProcess().ProcessName == "devenv"); }
}
我想
public static bool VSAddinMode { get { ... } }
public static bool VSPackageMode { get { ... } }
有什么建议可以做到最好吗?
答案 0 :(得分:0)
加载项和包与代码的不同安装程序类似。实际代码是相同的,并在同一个VS进程中执行。
要检测调用者,如果您知道主机模块名称,则可以遍历调用堆栈,直到找到加载项或包模块。
答案 1 :(得分:0)
您可能不应该使用Visual Studio 2010或更新版本的加载项,但这不是重点。
加载项始终使用相同的入口点。您可以使用以下属性:
public bool VSAddinMode
{
get;
internal set;
}
然后,在OnConnection
方法中,在调用其他代码之前设置VSAddinMode = true;
。
VS包并不总是只有一个入口点,因此实现VSPackageMode
的最佳方法如下:
public bool VSPackageMode
{
get { return !VSAddinMode; }
}