我有一个 Visual Studio 2008 .NET C++/CLI 解决方案。我的解决方案由许多子项目组成。我为每个项目定义了一个自定义构建目录,并将其称为“输出”。
我的解决方案:
- 我的第一个项目 (*.exe)
- MySecondProject (*.dll)
- ...
- MyNthProject (*.dll)
每个子项目都使用 Log4.net。因此我创建一个目录(称为 LogBinary)并将 log4.net DLL 放入该文件夹中。然后,为了使用 log4net,我添加此 DLL 作为对每个项目的引用。
但是当我尝试编译我的主项目 (*.exe) 时,我收到了大量警告(超过 400 个)。
举个例子:
警告 110 警告 C4945:“AbsoluteTimeDateFormatter”:无法从中导入符号'somepath\log4net.dll':如
'log4net::DateFormatter::AbsoluteTimeDateFormatter'已经从另一个程序集中导入'log4net'“somepath\log4net.dll”
很多警告:
已经从另一个程序集中导入
为什么我会收到这些警告?有没有人有解决方案将相同的 DLL 添加到多个项目(除了使用 GAC)?
我终于找到了解决这个问题的方法,感觉不像黑客。我在中找到了答案msdn 社交网站上“pyro_serv”的回复 http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/63efd1d6-bee1-4acc-95de-1f76a784d158:
解决方法是在每个 VC 项目引用上使用“在构建中使用依赖项”和“在构建中使用”标志(通过 VC 属性表),并根据您的情况切换它们以解决此错误。
所以对于OP的例子来说,它看起来像这样:
Solution -> Log4.net
Solution -> Proj1
Solution -> Proj1 -> Log4.net
Solution -> Proj2
Solution -> Proj2 -> Log4.net
...
避免警告的方法是设置Use Dependencies in Build
所有引用都为 falseProj1,Proj2,..,Projn
.
我刚刚用一个演示解决方案验证了这一点,它运行得很好 - 我不敢相信这个解决方案是如此简单以及我浪费了多少时间来找到它!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)