在使用moles程序集的项目上使用TFS2010构建时,如果无法解析引用,则会因-1002而失败

时间:2011-03-08 14:00:48

标签: tfs tfs2010 pex moles pex-and-moles

经过多次游戏后,我设法让TFS能够在除测试项目之外的所有项目上运行构建。这些都有鼹鼠组装。

我得到的错误是

  

C:\ Program Files \ Microsoft Moles \ bin \ Microsoft.Moles.targets(79):
  命令“”C:\ Program Files \ Microsoft Moles \ bin \ moles.exe“
  @ “C:\构建\ 2 \ CV2 \ DevBranchBuild的\ Sources \ CV.BL.Tests \ OBJ \发布\痣\ moles.args”“
  退出代码-1002。

警告是

  

C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets(1360):
  无法解决此引用。
  无法找到程序集“CV.DAL.Moles,Version = 1.0.0.0,Culture = neutral,processorArchitecture = MSIL”。
  检查以确保磁盘上存在组件   如果您的代码需要此引用,则可能会出现编译错误。

CV.DAL是我正在碾压的组件。

我使用的是最新版本的pex和moles。

我还将CV.DAL.moles文件签入TFS(不是程序集)。 一切都在我的本地机器上完美地构建。我用来做构建的机器具有完全相同的配置。确切地说,我的意思是一个是32位,另一个是64位:o(严重疏忽)。

有什么想法吗?

这使得pex和鼹鼠完全无用,因为它在合并分支时打破了门禁,这是一个很大的耻辱,因为我投入了相当多的时间。

修改

哪个molesAssemblies目录?
moles的安装文件夹或项目下的目录?
安装文件夹在两台计算机上具有相同的文件和文件大小。

2 个答案:

答案 0 :(得分:3)

这可能是两个问题之一 - 我前段时间遇到过这两个问题:

(一)您的一个依赖项被标记为32位。这可能是cv.dal.dll或其任何依赖项。 Moles.exe必须加载程序集才能执行 - 不确定为什么它不使用Load.RefrectionOnly - 并且由于moles.exe是ILONLY,它在64位计算机上执行为64位进程。这使得鼹鼠生成失败。

解决方法是将moles.exe设置为仅32位:

  

corflags moles.exe / Force / 32BIT +

(二)如果你使用并行构建(例如在.msbuild文件中你有选项BuildInParallel =“true”,或者你运行带有选项/ m的msbuild.exe)你在单元测试项目的PreBuildEvent中创建moles,然后你将遇到msbuild目标的问题。 PreBuildEvent在引用被解析之前执行,并且在解析引用时检查跨项目依赖性,因此在依赖项目完成构建之前,PreBuildEvent可能会开始执行。

没有好的解决方法。您可以使用非并行构建(这将使您的构建更慢),也可以将预先生成的* .moles.dll签入源代码控制(每次触摸moled程序集时都必须维护和更新)。

答案 1 :(得分:1)

旧版本的Moles曾经存在类似的问题。将disableCache =“true”添加到.moles文件中修复了这些问题: http://social.msdn.microsoft.com/Forums/en-US/pex/thread/a6d9a67b-0813-4392-a5dd-bea6eb479eea