我使用Visual Studio 2010和C#来构建应用程序的WinForms和类库。我有一些用于所有产品的公共库,然后是我的应用程序的一些产品特定库。我的组件都没有GAC'd。所有项目将其输出从各自的bin \ Debug文件夹复制到一个公用的Repository文件夹,并且所有组件引用都指向该Repository文件夹。Visual Studio 2010的大会参考文档
例如,Common.DAL.dll,Common.BLL.dll,Product.DAL.dll,Product.BLL和Product.exe
组件之间的引用通常是这样的:
- Product.exe包括提及Product.BLL
- Product.BLL包括到Common.BLL和Product.DAL引用
- Product.DAL包括提及Common.DAL
- 通讯on.BLL包括当所有这些都包含在同一个解决方案refrence到Common.DAL
,构建depencies是这样的:
- Common.BLL取决于Common.DAL
- Product.DAL取决于Common.DAL
- Product.BLL取决于Common.BLL和Product.DAL
- Product.exe取决于Product.BLL
这使得构建顺序是这样的:
- Common.DAL
- Common.BLL
- Product.DAL
- Product.BLL
- Product.exe
通常情况下,试图运行一个应用程序时,我得到以下错误:
无法加载文件或程序集“Common.DAL,版本= 1.0.0.0,文化=中性公钥= 4e5249f2e70e1da8”或它的一个依赖。该系统找不到指定的文件。
我已经查明问题到一个事实,即在Product.exe的bin \ Debug文件夹不是所有的解决方案建立在组件结束。
如果我清洁解决方案,然后重建它,文件显示是这样的:
- Common.DAL \ BIN \调试包含Common.DAL.dll
- Common.BLL \ BIN \调试包含Common.BLL.dll和Common.DAL.dll
- Product.DAL \ bin \ Debug包含Common.DAL.dll和Product.DAL.dll
- Product.BLL \ bin \ Debug包含Common.BLL。 dll,Common.DAL.dll, Product.BLL.dll和Product.DAL。dll的
- 但Product.exe \ BIN \调试只包含Product.exe,Product.BLL和 Product.DAL。 它缺少公共程序集。所以当我运行 Product.exe时,出现上面列出的错误。
我检查了我所有的项目和属性的属性。它们都使用.NET Framework 4.对我的程序集的所有引用都将“特定版本”属性设置为false,并将“复制本地”属性设置为true。
我可以力缺少的组件,以通过增加在Product.exe项目共同组件引用复制到Product.exe \ BIN \调试,但由于Product.exe不明确使用常见的组件,这感觉更像是一个混乱而不是解决方案。
我已经通过MSDN和Visual Studio文档看了看,如果我能找出什么影响或影响引用的程序集的拷贝,我已经如此搜查了类似的问题,但我还没有发现任何有用的。
我在为去哪里或下一步要做什么损失。
为什么你不希望使用项目参考?如果你到处使用项目引用,你是否仍然有这个问题? – McKay
我们在少数几个项目中遇到过这种情况,最终以“copylocal = true”引用了最上面程序集(* .exe或网站)中的所有程序集。这是一种解决方法,我也想知道这种行为的真正原因是什么。 –
@McKay,当项目全部存在于同一个解决方案中时,项目引用才是有效的。很多时候,所有的项目都不会采用相同的解决方案。 Common.DAL和Common.BLL程序集通常不在Product.exe解决方案中,甚至Product.DAL和Product.BLL项目也不一定必须位于Product.exe解决方案中。 –