3

在玩了很多之后,我设法让 TFS 能够在我的所有项目上运行构建,除了测试项目。这些里面有一个鼹鼠组件。

我得到的错误是

C:\Program Files\Microsoft Moles\bin\Microsoft.Moles.targets (79):
命令 ""C:\Program Files\Microsoft Moles\bin\moles.exe"
@"C:\Builds\2\cv2\ DevBranchBuild\Sources\CV.BL.Tests\obj\Release\Moles\moles.args""
以代码 -1002 退出。

警告是

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets (1360):
无法解析此引用。
找不到程序集“CV.DAL.Moles,版本=1.0.0.0,文化=中性,处理器架构=MSIL”。
检查以确保该程序集存在于磁盘上。
如果您的代码需要此引用,您可能会遇到编译错误。

CV.DAL 是我正在安装的组件。

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

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

有任何想法吗?

这使得 pex 和 moles 完全没用,因为它在合并分支时打破了门控签到,这是一个很大的耻辱,因为我在它们上投入了大量的时间。

编辑

哪个 molesAssemblies 目录?
痣的安装文件夹还是项目下的目录?
安装文件夹在两台机器上具有相同的文件和文件大小。

4

2 回答 2

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 中创建了痣,那么您将运行遇到 msbuild 目标的问题。PreBuildEvent 在解析引用之前执行,并且在解析引用时检查跨项目依赖关系,因此您的 PreBuildEvent 有可能在依赖项目完成构建之前开始执行。

没有好的解决方法。您可以使用非并行构建(这会使您的构建变慢),或者您可以将预先生成的 *.moles.dll 检入源代码控制(每次触摸您的摩尔组件时都必须维护和更新)。

于 2011-03-23T03:05:33.477 回答
1

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

于 2011-09-15T11:40:36.673 回答