在使用 moles 程序集的项目上使用 TFS2010 构建时失败,因为无法解析引用,错误代码为 -1002。

3
经过多次尝试,我成功地使TFS在所有项目上运行构建,但测试项目中含有一个moles程序集。我收到的错误信息如下:
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, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"。 请确保程序集存在磁盘上。 如果代码需要此引用,则可能会出现编译错误。
CV.DAL是我在moling的程序集。
我使用的是最新版本的pex和moles。
我也将“CV.DAL.moles”文件检入TFS(而不是程序集)。 一切在我的本地机器上都能完美地构建。我用来进行构建的机器与我的机器完全相同。我的意思是说,它们一个是32位,另一个是64位(这是个严重的疏忽)。
有任何想法吗?
这让Pex和Moles毫无用处,因为它破坏了合并分支时的门控提交,这非常遗憾,因为我在它们上面投入了相当多的时间。
编辑:
是哪些molesAssemblies目录?Moles的安装文件夹还是项目下的目录? 安装文件夹在两台机器上有相同的文件和文件大小。

愚蠢的评论,但是你在构建服务器上安装了完全相同版本的Pex和Moles.. 对吧?(我们在自动构建中使用Pex和Moles,通常遇到问题是因为版本不同。) - Vaccano
请检查您的构建机器和本地机器上的MolesAssemblies文件夹是否相同。(MolesAssemblies文件夹位于测试项目下。)它应该包含moles dlls。 - Vaccano
1
你好,感谢您的编辑。不幸的是,那已经是很久以前的事情了,我现在正在完全不同的项目上工作。在我提出这个问题的时候,我没有使用NuGet,所以它应该是安装在Microsoft研究网站上的Moles安装程序包。因此,它将使用完全相同的版本(与相同的安装程序)并且将使用默认位置。 - John Nicholas
2个回答

3
这可能是两个问题中的一个——我之前遇到过这两个问题:
(一)你的某个依赖项标记为32位。这可能是cv.dal.dll或其任何依赖项。Moles.exe必须加载程序集以执行——不确定为什么它不使用Load.RefrectionOnly——而且由于moles.exe是ILONLY,因此在64位机器上作为64位进程执行。这使得moles生成失败。
解决方法是将moles.exe设置为仅32位:

corflags moles.exe /Force /32BIT+

(二)如果你使用并行构建(例如,在你的.msbuild文件中,你有选项BuildInParallel="true",或者你使用选项/m运行msbuild.exe),并且在你的单元测试项目的PreBuildEvent中创建moles,那么你将遇到msbuild目标的问题。PreBuildEvent在引用被解析之前执行,并且在解析引用时检查跨项目依赖关系,因此有可能在依赖项目完成构建之前启动执行PreBuildEvent。
没有很好的解决方法。你可以使用非并行构建(这会使你的构建变慢),或者你可以将预生成的*.moles.dll检入源代码控制中(你必须维护和更新每次触摸你的模拟程序集)。

问题在于赏金的限制时间内需要测试答案...而我目前正在进行发布工作。很遗憾,它们有不可调整的时间限制。 - John Nicholas
这些建议有没有对任何人起作用?我尝试了两种方法,但我仍然遇到了无法解决的引用警告。然而,在构建目录中,.moles.dll文件存在,并且根据它们的时间戳,它们是在特定的构建期间生成的。 - Gorgsenegger
@Gorgsenegger,这对我有用。您可能希望打开MSBuild诊断日志记录来确定何时生成Moles程序集--是在编译之前还是之后。 MSBuild选项是/flp:LogFile=MyLog.log;Verbosity=diagnostic - seva titov

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接