【问题标题】:Cruise Control .NET ignoring project dependenciesCruise Control .NET 忽略项目依赖项
【发布时间】:2011-04-04 05:08:10
【问题描述】:

我已经成功使用 CC.Net 一段时间了,但现在我遇到了问题。我向 CC 添加了新的解决方案。它在 VS2008 中编译良好,但在 CC 中失败。主要原因是 - 解决方案中的项目以错误的顺序构建,不考虑依赖关系。 CC 只是尝试按照它们存储在磁盘上的顺序(字母顺序)来构建它们。 例如,在解决方案中有proect Proj1 和Proj2,Proj1 引用了Proj2。在 CCNET 上,Proj1 在 Proj2 之前构建并抛出错误“CSC : error CS0006: Metadata file 'D:\xxx\Proj2\bin\Debug\Proj2.dll' could not be found”。 我知道当使用 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>

我做错了什么?

【问题讨论】:

  • 您确定引用实际上是在项目上而不是在已编译的程序集中吗?

标签: cruisecontrol.net


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多