You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
.NET 5 VB Late bound variables unavailable at run time due to Public member 'Visible' on type 'Application' not found #66847
I'm running a C# application which calls a VB class called wrapper.vb, which uses MS Word objects. This code was tried and tested and worked fine with .NET 4.8 but now breaks in .NET 5.
I have a variable: Protected m_wdApp As Object
When the class is instantiated, it calls:
Reproduction Steps
Public Sub New()
m_wdApp = CreateObject("Word.Application")
m_wdApp.Visible = False
m_outputFormat = DOC_FORMAT
End Sub
Expected behavior
Actual behavior
This throws the following exception
:
Now the above would be all very fine and well, if I wasn't able to actually look at the contents of the m_wrdApp and see that yes, they are all intact and are all visible in my watch Windows
.
Using the Immediate window, attempting to access any of these attributes from the Word object throws an error (as you'd expect).
However, if I ask VS to "add a watch" to one of the attributes, for instance this "Visible" which we currently need, it comes out with this convoluted watch name
:
Regression?
I should note that all of this worked fine before upgrading to .NET 5, so I'm wondering if this is either a bug or there are some new rules for dealing with late bound variables.
@nkastratovic Moving from .NET Framework 4.8 to .NET 5 represents a major shift. The .NET 5 release represents a continuation of the .NET Core work started in early 2014 and has been a completely separate code base since then. Basic support for COM interop was added in .NET Core 3.0. However, some work remained and has been added back across the .NET Core 3.1 and .NET 5+ releases. I believe you may be hitting issues that weren't addressed until .NET 6, some of the dynamic/late-bound code scenarios in particular. Could you please try .NET 6 and see if you still observe the same behavior?
Activity
AaronRobinsonMSFT commentedon Mar 19, 2022
@nkastratovic Moving from .NET Framework 4.8 to .NET 5 represents a major shift. The .NET 5 release represents a continuation of the .NET Core work started in early 2014 and has been a completely separate code base since then. Basic support for COM interop was added in .NET Core 3.0. However, some work remained and has been added back across the .NET Core 3.1 and .NET 5+ releases. I believe you may be hitting issues that weren't addressed until .NET 6, some of the dynamic/late-bound code scenarios in particular. Could you please try .NET 6 and see if you still observe the same behavior?
nkastratovic commentedon Mar 22, 2022
We should be using Interop.
We added Imports Microsoft.Office.Interop
We also changed
Protected m_wdApp As Objectto...
Protected m_wdApp As Word.ApplicationAnd needed to update variables such as
Dim inlineShape As Objectto
Dim inlineShape As Word.InlineShapeand...
For Each hl As Object In m_wdApp.ActiveDocument.Hyperlinksto:
For Each hl As Word.Hyperlink In m_wdApp.ActiveDocument.Hyperlinks