2010-08-26 118 views
1

我一直在成功使用CC.Net一段时间,但现在我有一个问题。我为CC添加了新的解决方案。它在VS2008中编译得很好,但在CC中失败。主要原因是 - 解决方案中的项目以错误的顺序构建,不考虑依赖关系。 CC只是尝试按照它们存储在光盘上的顺序(按字母顺序)构建它们。 例如,在解决方案中存在projct Proj1和Proj2,Proj1参考Proj2。在CCNET Proj1之前构建Proj2并引发错误“CSC:错误CS0006:无法找到元数据文件'D:\ xxx \ Proj2 \ bin \ Debug \ Proj2.dll'”。 我知道这可能发生在使用devenv构建解决方案时,但我使用MSBuild。 以下代码负责建设:克鲁斯控制.NET忽略项目依赖关系

<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

你确定引用实际上是在项目上,而不是在编译的程序集上? – 2010-08-27 15:49:11

回答

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编辑每个项目文件),以确保它们不ProjectReferenceReference。还可以尝试在buildArgs列表中使用/v:d进行构建,以便获得更详细的构建日志,该日志将向您显示文件的解析位置以及顺序。一个'成功'解决的不同引用可能会尝试加载x.dll,直接在本地引用您的D:\xxx\Proj2\bin\Debug\Proj2.dll但失败。