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

在Outlook VSTO加载项路径中转义符号和,outlook,vsto,outlook-addin,add-in,office-addins,Outlook,Vsto,Outlook Addin,Add In,Office Addins,我有一个要为Outlook添加的VSI。它由助手加载项通过代码加载,方法是手动将相关值添加到注册表,联系Outlook启动加载项,然后清理注册表 发生这种情况的原因是,对于其中一个客户,外接程序的路径包含一个符号&符号。这将防止加载项加载以下异常: System.ArgumentException: Value does not fall within the expected range. at Microsoft.VisualStudio.Tools.Applications.Deplo

我有一个要为Outlook添加的VSI。它由助手加载项通过代码加载,方法是手动将相关值添加到注册表,联系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很好地加载了加载项。所以我知道一定有办法做到这一点

我已尝试使用&&or&;逃离清单的路径;但这没用。我还有别的办法吗?下面是我从代码加载外接程序的示例:

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;
    }
}

尝试对符号%26进行url编码。

没有考虑过url编码!这确实奏效了。。。。但是有一个警告。我还将我的加载项添加到VSTO包含列表中,以避免在加载时显示有关受信任发布者的消息。但是现在路径中的符号替换为%26后,此解决方法不再有效=\n如果我在包含列表注册表中替换了符号,即使我没有替换,也会显示受信任的发布者消息。我不知道,抱歉。这很公平。我将针对该问题发布一个单独的问题。