首页 > 解决方案 > 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,我们的大多数客户也有。)使用 OneClick 分发和签名的 .msi 安装程序都失败了。

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

有没有人见过这样的事情?据我所知,它只是在调用同一项目中不同类文件中的代码之前就死了。

编辑:我认为我没有说清楚的一件事 - 加载项本身加载时没有错误。有一些代码可以执行以从配置文件中提取当前环境,并且可以毫无问题地执行。该错误似乎发生在按钮单击事件上,该事件在检查用户授权后显示表单区域。

另外,我采用了 UserIsAuthorized 方法并将其添加到与按钮单击事件相同的 .vb 文件中,但仍然出现错误。就像应用程序无法在另一个方法中调用代码一样,无论在项目中的哪个位置找到该方法,这让我感到莫名其妙。

标签: .netvsto

解决方案


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

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


推荐阅读