如何检测在VS Addin或VS Package vsix中执行的库代码

时间:2014-04-10 07:37:59

标签: visual-studio visual-studio-addins vsix vspackage

我在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 { ... } }

有什么建议可以做到最好吗?

2 个答案:

答案 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; }
}