在同一个解决方案中为同一个项目添加相同的"*.dll"引用

Nov*_*ice 10 .net dll gac log4

我有一个Visual Studio 2008 .NET C++/CLI解决方案.我的解决方案包含许多子项目.我为每个项目定义了一个自定义的buid目录,称之为Output.

MySoultion

  • MyFirstProject(*.exe)
  • MySecondPrject(*.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除外)

最好的祝愿

Jon*_*age 5

我终于找到了解决这个问题的方法,这个方法并不像是黑客.我在msdn社交网站上的'pyro_serv`回复中找到了答案:

修复是使用每个VC项目引用上的"在构建中使用依赖关系"和"在构建中使用"标志(通过VC属性表),并根据您的情况切换它们以解决此错误.

所以对于OP的例子看起来像这样:

Solution -> Log4.net
Solution -> Proj1
Solution -> Proj1 -> Log4.net
Solution -> Proj2
Solution -> Proj2 -> Log4.net
...
Run Code Online (Sandbox Code Playgroud)

避免警告的方法是Use Dependencies in Build对所有引用设置为false Proj1,Proj2,..,Projn.

我刚刚通过演示解决方案对此进行了验证,它运行良好 - 我无法相信解决方案有多简单,以及浪费了多少时间才能找到它!


Dus*_*vis 1

更改项目上的引用,将所有“复制本地...”属性设置为 false。

来源:http ://developertips.blogspot.com/2008/07/ccli-warning-c4945.html