我有很多项目的大解决方案,使用VS2008 SP1,并且每天至少遇到一次LNK2022错误.如果我对解决方案进行全面重建,它可以很好地构建,但这并不好玩.
当依赖DLL"无意义地"更改时(即不更改任何方法或类),并且稍后构建引用项目时,就会发生这种情况.合并元数据时失败 - 无论这意味着什么.
首先要注意的是共享DLL是#using从多个.CPP文件引用的.
第二件事是,如果我从共享DLL中删除AssemblyInfo.cpp,那么问题就会消失(但我不确定这是否是一个合理的修复?).
我已尽可能地将其缩小到包含2个CLR类库项目的以下解决方案(xxx项目依赖于共享):
alt text http://i42.tinypic.com/jg2vds.png
以下是每个文件的内容:
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)
#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)