我今天像每天一样工作,当我尝试构建我的项目时,我得到了这个错误:
遇到 GUID 为“00020430-0000-0000-c000-000000000046”的程序集的多个版本。尝试预导入这些程序集之一。
它说问题出在我的应用程序根目录中的文件 TlbImp 中。唯一的问题是我的项目中没有这样的文件,据我所知从未有过。
我正在使用 Visual Studio 2010 使用 Web 应用程序(不确定这些信息是否有帮助,但无论如何)。
我今天像每天一样工作,当我尝试构建我的项目时,我得到了这个错误:
遇到 GUID 为“00020430-0000-0000-c000-000000000046”的程序集的多个版本。尝试预导入这些程序集之一。
它说问题出在我的应用程序根目录中的文件 TlbImp 中。唯一的问题是我的项目中没有这样的文件,据我所知从未有过。
我正在使用 Visual Studio 2010 使用 Web 应用程序(不确定这些信息是否有帮助,但无论如何)。
谢谢@DavRob,但这不是我要找的答案。@dev_Gabriel 我设法修复它,以下是对我有用的步骤:
它表示对 COM 组件的引用存在问题。
此问题已修复,并且应该在 Visual Studio 的未来版本中可用。
(注意:这并没有进入 SP1。)
Tlbimp 是类型库导入器。Visual Studio 使用它来生成对您添加的 COM 库的引用的互操作程序集。
只是为了添加@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 复制到我的解决方案的 DLL 文件夹(这只是我创建的一个文件夹,用于将我的所有程序集保存在一个地方,但从技术上讲,你可以把你的COM DLL obj/Debug 文件夹之外的任何位置),然后将我的两个项目的引用更改为指向位于我的 DLLs 文件夹中的 Interop.Profile.dll,而不是 obj/Debug 文件夹中的那个。
完成此操作后,我的应用程序构建成功(使用 Rebuild 或 Clean 然后构建)。
显然,我的案例非常具体,但希望它可以帮助那里的人。
我有同样的错误。我意识到我在两个不同的位置引用了同一个 .dll 两次。
所以我所做的就是删除对 .dll 的所有引用,然后从一个位置再次添加它。
这解决了错误。
我今天刚刚将一个 VS 2008 项目迁移到 VS 2013 时遇到了这个问题,还有另一个不同的转折点。我花了一段时间才弄清楚,所以它可能会帮助别人。我有一个包含 10 个左右项目的解决方案。其中一个项目是 VB,它引用了带有 GUI 的旧 OCX。要创建所需的互操作引用,您需要将 OCX 拖到 Winform 上,该 Winform 会引入其他引用以及创建所需的 AX 互操作引用。所有这些互操作 dll 都是在 ...\obj\debug\ 路径中创建的。我收到了几个“多版本”错误,但不是来自具有 COM 引用的项目,而是来自另一个引用 VB 项目的 C# 项目。为了摆脱这种情况,我将 VB 项目创建的互操作文件复制到 C# 项目的 ...\obj\debug\ 文件夹中。这有点痛苦,因为每次清理项目时,您需要重新复制文件,但至少现在可以使用。请注意,您不能将 AxInterop 移动到其他地方,并且无法手动引用它,因为它会搞砸事情。感谢@crunchy 给了我这个想法。