Cruise Control .NET忽略项目依赖性

时间:2010-08-26 10:51:43

标签: cruisecontrol.net

我已经成功使用CC.Net一段时间了,但现在我遇到了问题。我为CC添加了新的解决方案。它在VS2008中编译良好,但在CC中失败。主要原因是 - 解决方案中的项目以错误的顺序构建,而不考虑依赖性。 CC只是尝试按照它们存储在光盘上的顺序(按字母顺序)构建它们。 例如,在解决方案中有Proj1和Proj2,Proj1参考Proj2。在CCNET上,Proj1在Proj2之前构建并抛出错误“CSC:错误CS0006:元数据文件'D:\ xxx \ Proj2 \ bin \ Debug \ Proj2.dll'找不到”。 我知道当devenv用于构建解决方案时可能会发生这种情况,但我使用的是MSBuild。 以下代码负责构建:

<exec>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
    <baseDirectory>code\src</baseDirectory>
    <buildArgs>/p:Configuration=Debug /t:Rebuild PM.sln</buildArgs>
    <buildTimeoutSeconds>1200</buildTimeoutSeconds>
</exec>

我做错了什么?

1 个答案:

答案 0 :(得分:1)

错误Metadata file could not be found:  当它发生在我身上时,是因为在那个位置有一个名为proj1.exe的文件应该不存在。因此,当它使用proj1.exe作为参考(而不是proj1.dll)时,proj1.exe对本地System.EnterpriseServices.dll的引用失败。 proj1.exe引用System.EnterpriseServices.dll引用了System.EnterpriseServices.Wrapper.dll,这发生在我身上。其中proj1.exe不应包含在构建中,但有人根据我们的团队惯例命名了单元测试应用程序项目。

因此,我建议检查项目文件中的引用(在vs2010中卸载项目和编辑项目或使用文本或xml编辑器打开每个项目文件)以确保它们是ProjectReference而不是Reference。还可以尝试在buildArgs列表中使用/v:d进行构建,以便获得更详细的构建日志,该日志将显示文件的解析位置和顺序。 “成功”解析的另一个引用可能是尝试加载直接在本地引用您的D:\xxx\Proj2\bin\Debug\Proj2.dll但未通过的x.dll。