【发布时间】:2018-12-10 17:57:15
【问题描述】:
我在使用 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文件中,但仍然出现错误。就像应用程序无法在另一个方法中调用代码一样,无论在项目中的哪个位置找到该方法,这让我感到莫名其妙。
【问题讨论】: