2

我今天像每天一样工作,当我尝试构建我的项目时,我得到了这个错误:

遇到 GUID 为“00020430-0000-0000-c000-000000000046”的程序集的多个版本。尝试预导入这些程序集之一。

它说问题出在我的应用程序根目录中的文件 TlbImp 中。唯一的问题是我的项目中没有这样的文件,据我所知从未有过。

我正在使用 Visual Studio 2010 使用 Web 应用程序(不确定这些信息是否有帮助,但无论如何)。

4

5 回答 5

6

谢谢@DavRob,但这不是我要找的答案。@dev_Gabriel 我设法修复它,以下是对我有用的步骤:

  1. 在 Visual Studio 中右键单击项目
  2. 选择属性
  3. 选择参考选项卡。
  4. 检查是否有任何引用来自 obj\Debug 文件夹并将其删除。
于 2011-11-07T23:44:32.157 回答
2

有一个Microsoft connect Bug 填充

它表示对 COM 组件的引用存在问题。

此问题已修复,并且应该在 Visual Studio 的未来版本中可用。
(注意:这并没有进入 SP1。)

Tlbimp 是类型库导入器。Visual Studio 使用它来生成对您添加的 COM 库的引用的互操作程序集。

于 2011-05-05T18:01:58.957 回答
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 复制到我的解决方案的 DLL 文件夹(这只是我创建的一个文件夹,用于将我的所有程序集保存在一个地方,但从技术上讲,你可以把你的COM DLL obj/Debug 文件夹之外的任何位置),然后将我的两个项目的引用更改为指向位于我的 DLLs 文件夹中的 Interop.Profile.dll,而不是 obj/Debug 文件夹中的那个。

完成此操作后,我的应用程序构建成功(使用 Rebuild 或 Clean 然后构建)。

显然,我的案例非常具体,但希望它可以帮助那里的人。

于 2014-01-09T15:50:05.723 回答
0

我有同样的错误。我意识到我在两个不同的位置引用了同一个 .dll 两次。

所以我所做的就是删除对 .dll 的所有引用,然后从一个位置再次添加它。

这解决了错误。

于 2012-03-23T15:14:20.547 回答
0

我今天刚刚将一个 VS 2008 项目迁移到 VS 2013 时遇到了这个问题,还有另一个不同的转折点。我花了一段时间才弄清楚,所以它可能会帮助别人。我有一个包含 10 个左右项目的解决方案。其中一个项目是 VB,它引用了带有 GUI 的旧 OCX。要创建所需的互操作引用,您需要将 OCX 拖到 Winform 上,该 Winform 会引入其他引用以及创建所需的 AX 互操作引用。所有这些互操作 dll 都是在 ...\obj\debug\ 路径中创建的。我收到了几个“多版本”错误,但不是来自具有 COM 引用的项目,而是来自另一个引用 VB 项目的 C# 项目。为了摆脱这种情况,我将 VB 项目创建的互操作文件复制到 C# 项目的 ...\obj\debug\ 文件夹中。这有点痛苦,因为每次清理项目时,您需要重新复制文件,但至少现在可以使用。请注意,您不能将 AxInterop 移动到其他地方,并且无法手动引用它,因为它会搞砸事情。感谢@crunchy 给了我这个想法。

于 2014-11-17T19:57:17.963 回答