查找使用 VSTO 部署的文件的目录

Find directory of files that are deployed with a VSTO

我正在使用 VSTO 为 Outlook 2016 开发 outlook 插件。

在我的部署中,我有一个配置文件,它与 .dll 和 .vsto 文件以及插件中引用的所有其他 .dll 文件位于同一目录中。

是否有可能以编程方式获取 .vsto(和我的配置文件)所在的目录。例如,VSTO 部署到的目录可以是:"D:\MyPlugins\PluginX\pluginx.vsto"

我尝试了通常适用于 "normal" 应用程序的各种常量/方法,即:

虽然当我使用 Visual Studio 启动插件时它们中的大多数都在调试模式下工作, 显然 none 它们有效,因为当你安装 VSTO 时,你的程序集会被复制到某个生成的目录。

CodeBase 应始终适用于 VSTO 插件:

    //use CodeBase instead of Location because of Shadow Copy.
    string codebase = Assembly.GetExecutingAssembly().CodeBase;
    var vUri = new UriBuilder(codebase);
    string vPath = Uri.UnescapeDataString(vUri.Path + vUri.Fragment);
    string directory = Path.GetDirectoryName(vPath);
    if (!string.IsNullOrEmpty(vUri.Host)) directory = @"\" + vUri.Host + directory;

事实证明,我要查找的路径是清单的路径,它存储在 VSTO 之后的注册表中 运行。

清单路径存储在这里:{HKEY_CURRENT_USER/HKEY_LOCAL_MACHINE}\Software\Microsoft\Office\{Office application name}\Addins\{add-in ID}\Manifest