Найти каталог файлов, которые развернуты с помощью VSTO - PullRequest
0 голосов
/ 11 марта 2020

Я разрабатываю надстройку для Outlook с VSTO для Outlook 2016.

В моем развертывании у меня есть файл конфигурации, который находится в том же каталоге, что и файлы .dll и .vsto, а также все другие .dll, на которые есть ссылки в надстройке.

Возможно ли вообще программно получить каталог, в котором находится .vsto (и мой конфигурационный файл). Например, каталог, в котором будет развернут VSTO, может быть: "D: \ MyPlugins \ PluginX \ pluginx.vsto"

Я пробовал различные константы / методы, которые обычно работают с "нормальным" приложением, т.е. :

  • Environment.CurrentDirectory
  • Directory.GetCurrentDirectory ()
  • Assembly.Location / Assembly.CodeBase
  • Система. Windows .Forms .Application.StartupPath

и хотя большинство из них работают в режиме отладки, когда я запускаю плагин с Visual Studio, очевидно, что ни один из них не работает, потому что при установке VSTO ваша сборка копируется в некоторые сгенерированный каталог.

Ответы [ 2 ]

1 голос
/ 11 марта 2020

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;
0 голосов
/ 23 марта 2020

Получается, что я искал путь к манифесту, и он сохраняется в реестре после запуска VSTO.

Путь к манифесту сохраняется здесь: {HKEY_CURRENT_USER/HKEY_LOCAL_MACHINE}\Software\Microsoft\Office\{Office application name}\Addins\{add-in ID}\Manifest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...