我今天和我每天都在工作,当我尝试构建我的项目时,我收到了这个错误:
遇到了多个版本的 使用GUID进行装配 '00020430-0000-0000-C000-000000000046'。 尝试预先导入其中一个 组件。
它说问题出在文件TlbImp中,它位于我的应用程序的根目录中。唯一的问题是我的项目中没有这样的文件,据我记得从未有过。
我正在使用Visual Studio 2010的Web应用程序(不确定这些信息是否有帮助,无论如何)。
答案 0 :(得分:6)
谢谢@DavRob,但这不是我想要的答案。 @dev_Gabriel我设法解决了这个问题,以下是对我有用的步骤:
答案 1 :(得分:2)
有一个Microsoft connect Bug filled
它说引用COM组件时出现问题。
这已得到修复,应该可以在Visual Studio的未来版本中使用 (注意:这没有进入SP1。)
Tlbimp is the Type Library Importer。 Visual Studio使用它来生成对您添加的COM库的引用的互操作程序集。
答案 2 :(得分:1)
只是为了添加@ JeremyThompson的回复:
我的问题是由于引用COM对象,通过“添加引用”并浏览到应用程序的.exe(即C:\ Program Files(x86)\ ProFile \ profile.exe)。这增加了一个“Interop.Profile.dll”(显然这将根据你试图访问的SDK而不同)引用,它位于obj / Debug文件夹中,如@JeremyThompson所述。
在我的特定情况下,我在两个项目中引用了此Interop.Profile.dll,其中一个项目未获得上述错误并成功构建。我去了成功构建的项目的obj / Debug文件夹,并将Interop.Profile.dll复制到我的Solution的DLL文件夹(这只是我创建的一个文件夹,用于将所有程序集保存在一个地方,但你可以从技术上把你的COM DLL在obj / Debug文件夹之外的任何地方),然后将我的两个项目的引用更改为指向位于我的DLLs文件夹中的Interop.Profile.dll,而不是obj / Debug文件夹中的那个。
完成此操作后,我的应用程序构建成功(使用Rebuild,或Clean,然后构建)。
显然,我的情况非常具体,但希望它可以帮助那些人。
答案 3 :(得分:0)
我有同样的错误。我意识到我在两个不同的位置引用了两次相同的.dll。
所以我所做的就是删除所有对.dll的引用,并从一个位置再次添加它。
这解决了错误。
答案 4 :(得分:0)
我今天刚刚将VS 2008项目迁移到VS 2013时,又有了另一种不同的转折点。我花了一段时间才弄明白,所以它可能会帮助别人。 我有一个包含10个左右项目的解决方案。其中一个项目是VB,它引用了一个带有GUI的旧OCX。要创建所需的互操作引用,您需要将OCX拖到Winform上,该Winform会引入其他引用以及创建所需的AX互操作引用。所有这些interop dll都是在... \ obj \ debug \ path中创建的。 我得到了几个"多个版本"错误,但不是来自带有COM引用的项目,而是来自另一个引用VB项目的C#项目。 为了解决这个问题,我将VB项目创建的互操作文件复制到C#项目的... \ _ obj \ debug \文件夹中。 这有点痛苦,因为每次清理项目时,都需要重新复制文件,但至少它现在可以正常工作。请注意,您无法将AxInterop移动到其他位置,并且无法通过引用来引用它,因为它可以解决问题。 谢谢@crunchy给我的想法。