未验证 提交 540492ff 编写于 作者: R Rikki Gibson 提交者: GitHub

Don't throw in GetMetadataReference for an unexpected assembly type (#40794)

上级 3918f04f
......@@ -1118,7 +1118,12 @@ public new MetadataReference GetMetadataReference(IAssemblySymbol assemblySymbol
private protected override MetadataReference CommonGetMetadataReference(IAssemblySymbol assemblySymbol)
{
return GetMetadataReference(assemblySymbol.EnsureCSharpSymbolOrNull(nameof(assemblySymbol)));
if (assemblySymbol is Symbols.PublicModel.AssemblySymbol { UnderlyingAssemblySymbol: var underlyingSymbol })
{
return GetMetadataReference(underlyingSymbol);
}
return null;
}
internal MetadataReference GetMetadataReference(AssemblySymbol assemblySymbol)
......
......@@ -2267,6 +2267,20 @@ public void GetMetadataReferenceAPITest()
Assert.NotNull(reference2);
}
[Fact]
[WorkItem(40466, "https://github.com/dotnet/roslyn/issues/40466")]
public void GetMetadataReference_VisualBasicSymbols()
{
var comp = CreateCompilation("");
var vbComp = CreateVisualBasicCompilation("", referencedAssemblies: TargetFrameworkUtil.GetReferences(TargetFramework.Standard));
var assembly = (IAssemblySymbol)vbComp.GetBoundReferenceManager().GetReferencedAssemblies().First().Value;
Assert.Null(comp.GetMetadataReference(assembly));
Assert.Null(comp.GetMetadataReference(vbComp.Assembly));
Assert.Null(comp.GetMetadataReference((IAssemblySymbol)null));
}
[Fact]
public void ConsistentParseOptions()
{
......
......@@ -1232,7 +1232,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Function
Private Protected Overrides Function CommonGetMetadataReference(assemblySymbol As IAssemblySymbol) As MetadataReference
Return GetMetadataReference(assemblySymbol.EnsureVbSymbolOrNothing(Of AssemblySymbol)(NameOf(assemblySymbol)))
Dim symbol = TryCast(assemblySymbol, AssemblySymbol)
If symbol IsNot Nothing Then
Return GetMetadataReference(symbol)
End If
Return Nothing
End Function
Public Overrides ReadOnly Property ReferencedAssemblyNames As IEnumerable(Of AssemblyIdentity)
......
......@@ -2257,6 +2257,19 @@ End Class
Assert.NotNull(reference2)
End Sub
<WorkItem(40466, "https://github.com/dotnet/roslyn/issues/40466")>
<Fact>
Public Sub GetMetadataReference_CSharpSymbols()
Dim comp As Compilation = CreateCompilation("")
Dim csComp = CreateCSharpCompilation("", referencedAssemblies:=TargetFrameworkUtil.GetReferences(TargetFramework.Standard))
Dim assembly = csComp.GetBoundReferenceManager().GetReferencedAssemblies().First().Value
Assert.Null(comp.GetMetadataReference(DirectCast(assembly.GetISymbol(), IAssemblySymbol)))
Assert.Null(comp.GetMetadataReference(csComp.Assembly))
Assert.Null(comp.GetMetadataReference(Nothing))
End Sub
<Fact()>
Public Sub EqualityOfMergedNamespaces()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册