经过多次游戏后,我设法让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的安装文件夹或项目下的目录?
安装文件夹在两台计算机上具有相同的文件和文件大小。
答案 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