diff --git a/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/EvaluationContextBase.cs b/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/EvaluationContextBase.cs index d3b104221edff..3501b5d9746c0 100644 --- a/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/EvaluationContextBase.cs +++ b/src/ExpressionEvaluator/Core/Source/ExpressionCompiler/EvaluationContextBase.cs @@ -17,6 +17,7 @@ internal abstract class EvaluationContextBase internal static readonly AssemblyIdentity SystemCoreIdentity = new AssemblyIdentity("System.Core"); internal static readonly AssemblyIdentity SystemXmlIdentity = new AssemblyIdentity("System.Xml"); internal static readonly AssemblyIdentity SystemXmlLinqIdentity = new AssemblyIdentity("System.Xml.Linq"); + internal static readonly AssemblyIdentity MicrosoftVisualBasicIdentity = new AssemblyIdentity("Microsoft.VisualBasic"); /// /// Compile C# expression and emit assembly with evaluation method. diff --git a/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/EvaluationContext.vb b/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/EvaluationContext.vb index a4e55e411f628..f23844408add0 100644 --- a/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/EvaluationContext.vb +++ b/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/EvaluationContext.vb @@ -586,6 +586,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator End If Case ERRID.ERR_XmlFeaturesNotAvailable Return ImmutableArray.Create(SystemIdentity, SystemCoreIdentity, SystemXmlIdentity, SystemXmlLinqIdentity) + Case ERRID.ERR_MissingRuntimeHelper + Return ImmutableArray.Create(MicrosoftVisualBasicIdentity) End Select Return Nothing diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/MissingAssemblyTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/MissingAssemblyTests.vb index a373a93f5f7a5..d471ab587f0d7 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/MissingAssemblyTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/MissingAssemblyTests.vb @@ -47,6 +47,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests EvaluationContextBase.SystemXmlLinqIdentity) End Sub + + Public Sub ErrorsRequiringVbCore() + Assert.Equal(EvaluationContextBase.MicrosoftVisualBasicIdentity, GetMissingAssemblyIdentities(ERRID.ERR_MissingRuntimeHelper).Single()) + End Sub + Public Sub MultipleAssemblyArguments() Dim identity1 = New AssemblyIdentity(GetUniqueName()) @@ -192,6 +197,38 @@ End Class EvaluationContextBase.SystemXmlLinqIdentity) End Sub + + Public Sub ERR_MissingRuntimeAssembly() + Const source = " +Public Class C + Public Sub M(o As Object) + End Sub +End Class +" + Dim comp = CreateCompilationWithMscorlib({source}, compOptions:=TestOptions.DebugDll) + Dim context = CreateMethodContextWithReferences(comp, "C.M", MscorlibRef) + + Const expectedError = "(1,2): error BC35000: Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.Operators.CompareObjectEqual' is not defined." + Dim expectedMissingAssemblyIdentity = EvaluationContextBase.MicrosoftVisualBasicIdentity + + Dim resultProperties As ResultProperties = Nothing + Dim actualError As String = Nothing + Dim actualMissingAssemblyIdentities As ImmutableArray(Of AssemblyIdentity) = Nothing + + context.CompileExpression( + DefaultInspectionContext.Instance, + "o = o", + DkmEvaluationFlags.TreatAsExpression, + DiagnosticFormatter.Instance, + resultProperties, + actualError, + actualMissingAssemblyIdentities, + EnsureEnglishUICulture.PreferredOrNull, + testData:=Nothing) + Assert.Equal(expectedError, actualError) + Assert.Equal(expectedMissingAssemblyIdentity, actualMissingAssemblyIdentities.Single()) + End Sub +