VSTO加载项突然无法调用外部方法

时间:2018-12-10 17:57:15

标签: .net vsto

我在使用VSTO Outlook插件时遇到了一个非常莫名其妙的问题(并且不一致)。在进行某些升级时,突然间AddIn似乎无法调用项目本身不同类中的代码。这不是引用的程序集或任何东西,只是在单独的类文件中找到的托管代码。 我能够确认的最佳方法是在被调用方法的第一行添加一个警报框。

在主AddIn FormRegion中:

Private Sub DocumentMenu_Click(sender As Object, e As EventArgs) Handles DocumentMenu.Click

    Dim applicationName As String = "MyApp"
    Dim supportGroupName As String = "MyAppSupport"

    SetLoadingStatus("Validating user...") ' <<-- This works
    MsgBox("About to call the method") ' <<-- This works
    Dim userStatus As String = DocumentService.UserIsAuthorized ' <<-- Dies here
    If userStatus.ToUpperInvariant() = "Valid User".ToUpperInvariant() Then

        Me.SetLoadingStatus("Checking attachments...")

在DocumentService.vb中:

Public Shared Function UserIsAuthorized() As String
    MsgBox("First line of method") '<< -- Doesn't ever come up
        Try
            Using handler As New RestServiceHandler
                Using client As HttpClient = handler.GetRestConfiguartion()
                ' Etc. - irreleveant because it never gets this far

令人烦恼的是,我根本没有更改发生这种情况的代码。它并不会一直发生(它可以在我的机器,同事的机器以及一台测试机器上运行,但不能在第二台或最终用户的机器上运行)。

我是计算机的本地管理员,但不在任何一台测试计算机上(包括工作的计算机)。在Win7 / Office 2010和Win10 / Office 2016计算机上均失败。 (所有运行它的计算机都具有Win10 / Office 2016,并且我们的大多数客户端也有Win10 / Office2016。)使用OneClick发行版和已签名的.msi安装程序均失败。

我确实将.Net框架从4.0更新到4.6.2,但是即使将其回滚到4.0,我仍然会看到这种现象。在4.0的生产环境中有一个版本可供270个用户使用,其中一个版本不适用于新用户。我们最终用户的机器被锁定,因此我的调试选项相当有限。在可以复制此行为的一台测试计算机上,我没有在事件查看器中看到任何错误记录。

有人见过这样的东西吗?尽我所能确定,它只是死了,然后才可以调用同一项目中不同类文件中的代码。

编辑:我不明白我要说的一件事-加载加载项本身没有错误。有一些代码可以执行以从配置文件中提取当前环境,并且可以正常执行。该错误似乎发生在按钮单击事件上,该事件在检查用户授权后显示了表单的区域。

此外,我采用了UserIsAuthorized方法并将其添加到与按钮单击事件相同的.vb文件中,并且仍然发生错误。就像该应用程序无法在另一个方法中调用代码一样,无论该方法在项目中的哪个位置都被发现,这似乎让我感到困惑。

1 个答案:

答案 0 :(得分:0)

过去,竞争性插件存在问题。如果一个插件需要与另一个插件不同的.Net版本,则加载的第一个插件将获胜,而另一个插件将失败。根据Office版本的不同,可能会发生这种情况,因为Office应用程序仅运行一个版本的.Net,而不运行多个版本。

在故障电脑上检查其他插件并禁用;可能会提供答案。