У меня есть надстройка 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;
}
}