不能将项目“DataControl”中的依赖项“Database, Version=1.0.1021.11237, Culture=neutral”复制到运行目录,因为它将改写引用“Database, Version=1.0.2211.29717, Culture=neutral”。
![](/images/cnblogs_com/notus/23678/o_err.gif)
不能将项目“DataControl”中的依赖项“Database, Version=1.0.1021.11237, Culture=neutral”复制到运行目录,因为它将改写引用“Database, Version=1.0.2211.29717, Culture=neutral”。
当你一开始的设计混乱无比,各个组件相互引用十分复杂的时候,这个警告或错误就会出现。
假设有一个项目同时被三个不同的项目引用,三个中的一个被三个中的另一个引用,而这三个项目又被另一个引用……好了,我已经头晕了,而vs不会晕,它会老实的根据生产顺序来生产这些程序集。这样先生产的有一个版本号,后来生成的又有一个版本号,最后的结果是你要用同一个程序集的不同版本来运行,而很明显,一个程序集只需要一个,这样问题就来了:vs想要替换掉先进来的dll,但是这个dll是另一个项目生产所必须的……轻的只是警告,严重的时候产生错误会让你无法编译项目!
要解决这个问题,先要说一下程序集的版本控制……好了,现在明白了吧,对这个问题最简单的解决办法就是找到项目的AssemblyInfo.cs文件,将里面的[assembly: AssemblyVersion("1.0.*")]改成你自己的版本号,比如[assembly: AssemblyVersion("1.0.3")]。这样程序集的版本就不会自己调节,而是根据你指定的版本数字来定。这样子不论你把项目编译多少次,版本号始终是你自定义的那个号码,而最后的结果就是不会出现本文标题所示的错误了。
如果你恰好被这个问题所困扰,那就快去试试吧 :)
ps:大概半年没有些技术文章了吧??这个问题是这几天把我弄的头痛的厉害,因为要修改的是前人留下的东西。一开始无论如何都不能编译!后来我试着在配置管理器中设置那些被重复引用的项目只被编译一次,一开始还有效,都后来自己都被弄晕了。也许是否极泰来,哈,我突然就想到了版本号在AssemblyInfo.cs文件里有控制……最后问题圆满解决了。这也告诉我们,碰到问题,不要想到一个办法就急着去尝试,稍微多想一想,说不定更好的办法就在不远处……好像到现在为之有些唐僧了,呵呵,那就到这里吧。
顺便祝大家新年快乐 :)