运行 Moles 0.94 以剔除 3rdparty 程序集中的某些类型,否则这些类型很难测试。在本地运行良好,测试通过并且解决方案编译良好。第一次编译确实需要相当长的时间,因为它生成了 moles 程序集(将它们放入一个名为 \molesassemblies 的子文件夹中),但随后的速度要快得多 - moles 输出以下内容:
Moles : info : compilation : assembly metadata hash unchanged, skipping code generation
问题是,我如何在每次重新同步(拆除)工作区的构建服务器上模仿这种行为?这甚至可能吗?(目前使用 TFS 2010 作为构建服务器)。
我天真地尝试检查名为 \molesassemblies\ 的项目子文件夹的内容,希望当 msbuild 在解决方案编译期间调用 moles 框架时,它会识别出程序集已经存在,从而跳过代码生成。然而,仅仅这样做似乎并没有奏效。框架似乎认为它需要重新生成代码,然后抱怨签入的程序集是只读的:
00:00:00.00> moles
Moles : info : metadata : ignoring reference D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\MolesAssemblies\3rdparty.assembly.moles.dll
Moles : info : metadata : loading D:\Builds\49\mycompany\BUILD-NAME\Sources\3rdPartyBinaries\3rdparty\3rdparty.assembly.dll
Moles : info : compilation : output assembly name: 3rdparty.assembly.moles
Moles : info : code : found 2912 types
Moles : info : code : visibility: exported or assembly(3rdparty.assembly.moles)
00:00:03.10> code generation
Moles : info : code : generating code at D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\obj\Release\Moles\sk\m.g.cs
00:00:03.44> stubs generation
Moles : info : code : generated 2274 stub types
00:00:08.32> moles generation
Moles : info : code : generated 2638 mole types
00:00:45.13> compiling
Moles : error : compilation : D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\MolesAssemblies\3rdparty.assembly.moles.dll readonly [D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\TestHelpers.csproj]
00:02:27.44> moles generator 1 errors, 0 warnings
C:\Program Files\Microsoft Moles\bin\Microsoft.Moles.targets(79,5): error MSB3073: The command ""C:\Program Files\Microsoft Moles\bin\moles.exe" @D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\obj\Release\Moles\moles.args" exited with code -1009. [D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\TestHelpers.csproj]
Result: error while copying output (-1009 - 0xfffffc0f)
MolesAssemblies:
3rdparty.assembly.moles ignored because already referenced from other location
Done Building Project "D:\Builds\49\mycompany\BUILD-NAME\Sources\Products\Product\Tests\TestHelpers\TestHelpers.csproj" (default targets) -- FAILED.
任何关于我可以做些什么来完成这项工作的指导将不胜感激。
谢谢。