在 Outlook VSTO 加载项的路径中转义 & 符号

Escaping ampersand in a path to Outlook VSTO add-in

我有一个用于 Outlook 的 VSTO 加载项。它由辅助加载项通过代码加载,方法是手动将相关值添加到注册表,联系 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;
    }
}

尝试 url 编码 (%26) 符号。