这是引用包含泛型的 C# 接口的 VB.NET 实现的 FxCop 错误吗?

Posted

技术标签:

【中文标题】这是引用包含泛型的 C# 接口的 VB.NET 实现的 FxCop 错误吗?【英文标题】:Is this an FxCop bug for a VB.NET implementation referencing a C# interface containing generics? 【发布时间】:2014-05-01 11:03:05 【问题描述】:

我们在 VB.NET 中有一个引用 C# 库的应用程序。接口定义在 C# 库中,实现在 VB.NET 应用程序中。其中一个接口定义是可空结构的类型化方法。

FxCop 无法正确分析并报错:

读取模块“控制台”时遇到以下错误:无法解析成员引用:[Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]Library.IWithGeneric::GetSomething。

我创建了一个基本的大纲应用程序来证明这一点。

代码是否缺少某些内容以便 FxCop 可以加载模块(它编译和运行时没有警告)? 或者它只是一个 FxCop 错误?

IWithGeneric.cs

namespace Library

    public interface IWithGeneric
    
        T? GetSomething<T>() where T : struct;
    

VbGenericImplementation.vb

Imports Library

Public Class VbGenericImplementation
    Implements IWithGeneric

    Public Function GetSomething(Of T As Structure)() As T? Implements IWithGeneric.GetSomething
        Return New T
    End Function

End Class

Root.vb

Module Root

    Sub Main()

        Dim test As New VbGenericImplementation

        Dim result = test.GetSomething(Of Integer)()

        System.Console.WriteLine(result)
        System.Console.ReadLine()

    End Sub

End Module

【问题讨论】:

如你所说,代码编译运行正常,所以代码没有问题。另一方面,FxCop 似乎有问题,要么是因为它找不到 DLL(它在那里吗?),要么是因为它有一个错误。您使用的是哪个版本的 FxCop? 同意,但它可能正在编译和运行,但不是以最佳实践方式完成的。 FxCop 版本 10 (10.0.30319.1) 如果那是真的,你会认为 FxCop 会比炸毁更能让你知道。 我已经向Microsoft提出了这个问题 【参考方案1】:

微软已将该问题作为一个“自然解决”的错误关闭:

奇怪的是,这里的 IL 让 FxCop 如此困惑!对于 VS “14”,我们正在从基于 IL 的分析转向基于 Roslyn 的基于源的分析引擎。当我们进行这种过渡时,这类问题应该自然而然地得到解决。

亚历克斯·特纳

高级项目经理

Visual Basic 和 C# 编译器

发件人:http://connect.microsoft.com/VisualStudio/feedback/details/870827/fxcop-10-0-unable-to-process-vb-net-assembly-containing-c-generics-implementation

【讨论】:

以上是关于这是引用包含泛型的 C# 接口的 VB.NET 实现的 FxCop 错误吗?的主要内容,如果未能解决你的问题,请参考以下文章

java学习----泛型

C#进阶C# 泛型

c# 泛型study

关于 c# 接口和泛型的问题

在 C# 中使用泛型的相互依赖的接口

c# where(泛型类型约束)