类型“<typename1>”的值无法转换为“<typename2>”

更新:2007 年 11 月

错误消息

类型“<typename1>”的值无法转换为“<typename2>”。类型不匹配可能是由于混合使用文件引用和对程序集“<assemblyname>”的项目引用造成的。请尝试将项目“<projectname1>”中对“<filepath>”的文件引用替换为对“<projectname2>”的项目引用。

在项目同时进行了项目引用和文件引用的情况中,编译器无法保证一种类型可转换为另一种类型。

下面的伪代码阐释了可能会产生此错误的情况。

' ================ Visual Basic project P1 ================

' P1 makes a PROJECT REFERENCE to project P2

' and a FILE REFERENCE to project P3.

Public commonObject As P3.commonClass

commonObject = P2.getCommonClass()

' ================ Visual Basic project P2 ================

' P2 makes a PROJECT REFERENCE to project P3

Public Function getCommonClass() As P3.commonClass

Return New P3.commonClass

End Function

' ================ Visual Basic project P3 ================

Public Class commonClass

End Class

项目 P1 通过项目 P2 对项目 P3 进行间接的项目引用,同时还对 P3 进行直接的文件引用。commonObject 的声明使用对 P3 的文件引用,而对 P2.getCommonClass 的调用使用对 P3 的项目引用。

这种情况下的问题在于:文件引用为 P3 的输出文件(通常为 p3.dll)指定文件路径和名称,而项目引用按项目名识别源项目 (P3)。因此,编译器无法通过两个不同的引用保证 P3.commonClass 类型来自于相同的源代码。

在混用项目引用和文件引用时,通常会出现此情况。在前面的阐释中,如果 P1 对 P3 进行直接的项目引用而不是进行文件引用,则此问题将不会出现。

**错误 ID:**BC30955

更正此错误

  • 将文件引用改为项目引用。

请参见

任务

如何:在 Visual Studio 中添加或移除引用 (Visual Basic)

概念

项目引用

其他资源

Visual Basic 中的类型转换

引用命名空间和组件

管理引用