VS2005链接过程中合并元数据时忽略文件

Posted

技术标签:

【中文标题】VS2005链接过程中合并元数据时忽略文件【英文标题】:Ignoring files when merging metadata during the linking process in VS2005 【发布时间】:2009-05-06 18:45:03 【问题描述】:

我试图让我的项目使用公共语言运行时进行编译,但当我尝试进行调试构建时突然遇到以下链接错误:

Main.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (IDirect3DVertexShader9): (0x0200056e).

Main.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (IDirect3DVertexDeclaration9): (0x0200056f).

Main.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (IDirect3DDevice9): (0x02000a2a).

Main.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (IDirect3DSwapChain9): (0x02000ab0).

Main.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (IDirect3DIndexBuffer9): (0x02000ace).

Main.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (IDirect3DVertexBuffer9): (0x02000b4e).

Main.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (IDirect3DTexture9): (0x02000bbd).

Main.obj : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (IDirect3D9): (0x02000c0e).

LINK : fatal error LNK1255: link failed because of metadata errors

我已经尝试重建整个解决方案,但仍然看到相同的错误。如果有人知道可能导致这种情况的原因,我想知道。我能看到的唯一解决方案是告诉调试器不要为重复类型构建调试信息。唯一的问题是我不知道如何做到这一点(或者实际上是否可能)。如果有人知道,我将不胜感激。

非常感谢您的所有帮助!

丹尼尔·奥尔巴赫

【问题讨论】:

【参考方案1】:

您是否拥有多个版本的IDirect3D 或任何库?例如:假设您有几个模块,一个您预先构建的 dll(依赖于某个未知版本的 IDirect)和一个您构建的模块,例如该库的最新版本。这会给你这样的错误。

请参阅 LNK 2022 的 MSDN 文档

【讨论】:

【参考方案2】:

如果您在 C++/CLI 中转发声明类,然后在其他地方阅读完整声明,则会出现此错误:

// one.h
class CMyNewClass;

// two.h
class CMyNewClass

//...
;

//main.cpp
#include "one.h"
#include "two.h"
//...

我认为这种组合是导致此问题的原因,但我现在手头没有 Visual Studio 来仔细检查它。

【讨论】:

以上是关于VS2005链接过程中合并元数据时忽略文件的主要内容,如果未能解决你的问题,请参考以下文章

VS2017上传项目到github,在github中没有项目文件,只有两个忽略文件。

选择在 VS Code 中搜索时要忽略的文件夹

git合并时忽略某个文件

git合并时忽略某个文件

git合并分支时禁止合并特定文件

SSDT/VS2015 数据库部署——发布忽略嵌套视图