项目A引用项目B.项目B引用项目C.项目A不引用项目C.
这在当地建立良好。但是,在构建服务器上,它出错,因为项目A不引用项目C.
错误:
错误BC30009:程序集'ProjectC,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'所需的引用,包含已实现的接口'ProjectC.IFoo'。在项目中添加一个。
我怎样才能在提交前发现这个?
编辑: 以下是有关我的问题的更多信息:http://sstjean.blogspot.com/2006/11/msbuild-cant-find-secondary-references.html
答案 0 :(得分:1)
作为最佳实践,您可以做以下两件事,以确保正确引用您的项目,MSBuild将能够正确找到您引用的项目。
使用项目引用而不是引用dll。创建一个名为dependencies或libs的文件夹,并将任何引用的dll放在此文件夹中。
通过右键单击项目并选择项目构建顺序,检查每个项目的构建顺序和项目依赖项选项卡。确保项目中的每个引用都由该项目构建。
MSBuild不知道.sln文件是什么。 MSBuild读取并解析.sln文件以确定项目的构建顺序。通过项目引用,MSBuild将能够以正确的顺序遍历和构建项目。有关更多信息,请参阅以下链接
此链接还有助于解释您为什么会看到不同的行为以及如何捕获它。
Visual Studio Integration (MSBuild)
在Visual Studio中,解决方案文件和项目构建顺序由Visual Studio本身控制。在命令行上使用msbuild.exe构建解决方案时,MSBuild会解析解决方案文件并对项目构建进行排序。在这两种情况下,项目都是按依赖顺序单独构建的,并且不会遍历项目到项目引用。相反,当使用msbuild.exe构建单个项目时,将遍历项目到项目引用。
在Visual Studio中构建时,属性$(BuildingInsideVisualStudio)设置为true。这可以在您的项目或.targets文件中使用,以使构建行为不同。
答案 1 :(得分:0)
转到项目引用,右键单击Oracle.DataAccess
,然后转到属性,并在属性页中确保特定版本为false,并将“复制到本地”设置为true。