查找使用 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" 应用程序的各种常量/方法,即:
- Environment.CurrentDirectory
- Directory.GetCurrentDirectory()
- Assembly.Location / Assembly.CodeBase
- System.Windows.Forms.Application.StartupPath
虽然当我使用 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
我正在使用 VSTO 为 Outlook 2016 开发 outlook 插件。
在我的部署中,我有一个配置文件,它与 .dll 和 .vsto 文件以及插件中引用的所有其他 .dll 文件位于同一目录中。
是否有可能以编程方式获取 .vsto(和我的配置文件)所在的目录。例如,VSTO 部署到的目录可以是:"D:\MyPlugins\PluginX\pluginx.vsto"
我尝试了通常适用于 "normal" 应用程序的各种常量/方法,即:
- Environment.CurrentDirectory
- Directory.GetCurrentDirectory()
- Assembly.Location / Assembly.CodeBase
- System.Windows.Forms.Application.StartupPath
虽然当我使用 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