相关疑难解决方法(0)

"LNK2022:元数据操作失败"让我疯狂

我有很多项目的大解决方案,使用VS2008 SP1,并且每天至少遇到一次LNK2022错误.如果我对解决方案进行全面重建,它可以很好地构建,但这并不好玩.

当依赖DLL"无意义地"更改时(即不更改任何方法或类),并且稍后构建引用项目时,就会发生这种情况.合并元数据时失败 - 无论这意味着什么.

首先要注意的是共享DLL是#using从多个.CPP文件引用的.
第二件事是,如果我从共享DLL中删除AssemblyInfo.cpp,那么问题就会消失(但我不确定这是否是一个合理的修复?).

我已尽可能地将其缩小到包含2个CLR类库项目的以下解决方案(xxx项目依赖于共享):
alt text http://i42.tinypic.com/jg2vds.png

以下是每个文件的内容:

Shared.cpp:

public ref class Shared
{
};
Run Code Online (Sandbox Code Playgroud)

英寸:

#pragma once
#using "Shared.dll"
public ref class Common
{
private:
    Shared^ m_fred;
};
Run Code Online (Sandbox Code Playgroud)

xxx.cpp和xxx2.cpp:

#include "inc.h"
Run Code Online (Sandbox Code Playgroud)

要重现,首先要重建解决方案.它会建立好.
现在保存Shared.cpp并构建解决方案,它将构建正常并显示:

...
2>------ Build started: Project: xxx, Configuration: Debug Win32 ------
2>Inspecting 'd:\xxx\xxx\Debug\Shared.dll' changes ...
2>No significant changes found in 'd:\xxx\xxx\Debug\Shared.dll'.
2>xxx - 0 error(s), 0 warning(s)
========== Build: 2 succeeded, …
Run Code Online (Sandbox Code Playgroud)

linker metadata c++-cli assemblyinfo visual-studio-2008

24
推荐指数
2
解决办法
1万
查看次数