类型“<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)