Выход из амперсанда в пути к надстройке Outlook VSTO - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть надстройка VSTO для Outlook.Он загружается вспомогательной надстройкой через код, вручную добавляя соответствующие значения в реестр, связываясь с Outlook, чтобы запустить надстройку, а затем очищая реестр.

Так получилось, что для одного из клиентов путь к надстройке содержал символ амперсанда (&).Это предотвращает загрузку надстройки со следующим исключением:

System.ArgumentException: Value does not fall within the expected range.
  at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.GetManifests(TimeSpan timeout)
  at Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()

После некоторых исследований я обнаружил, что виноват амперсанд в пути.Я ищу способ преодолеть это ограничение.Я создал простую пустую тестовую надстройку и попытался установить ее с помощью файла * .vsto, который находится в папке с символом амперсанда на пути, по которому она прошла.Outlook загрузил надстройку просто отлично.Так что я знаю, что определенно есть способ, как это делает VSTO.

Я пытался избежать пути манифеста с помощью && или &;но это не помоглоЕсть ли другой способ, которым я могу подойти к этому?Вот пример того, как я загружаю надстройку из кода:

using (RegistryKey key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Office\Outlook\Addins", true))
{
    key.DeleteSubKey("MyAddIn", false);
    using (RegistryKey addinKey = key.CreateSubKey("MyAddIn"))
    {
        addinKey.SetValue("Manifest", $"{ new Uri(addInPath).AbsoluteUri) }|vstolocal");
        addinKey.SetValue("Description", "My Outlook Addin");
        addinKey.SetValue("FriendlyName", "My Outlook Addin");
        addinKey.SetValue("LoadBehavior", 0);
    }

    _outlookApplication.COMAddIns.Update();

    key.DeleteSubKey("MyAddIn", false);
}

foreach (COMAddIn comAddin in _outlookApplication.COMAddIns)
{
    if (comAddin.Description == "My Outlook Addin")
    {
        ConnectAddIn(comAddin);

        break;
    }
}

1 Ответ

0 голосов
/ 14 февраля 2019

Попробуйте URL кодировать (%26) амперсанд.

...