我在使用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文件中,并且仍然发生错误。就像该应用程序无法在另一个方法中调用代码一样,无论该方法在项目中的哪个位置都被发现,这似乎让我感到困惑。
答案 0 :(得分:0)
过去,竞争性插件存在问题。如果一个插件需要与另一个插件不同的.Net版本,则加载的第一个插件将获胜,而另一个插件将失败。根据Office版本的不同,可能会发生这种情况,因为Office应用程序仅运行一个版本的.Net,而不运行多个版本。
在故障电脑上检查其他插件并禁用;可能会提供答案。