在构建服务器上运行Moles - 如何跳过代码生成的任何想法?

时间:2011-11-23 12:17:05

标签: .net tfs msbuild moles pex-and-moles

运行Moles 0.94以便在3rdparty程序集中存根某些难以测试的类型。在本地工作很好,测试通过,解决方案编译得很好。它第一次编译它确实需要一段时间,因为它生成了鼹鼠组件(将它们放入一个名为\ molesassemblies的子文件夹中),但随后它会更快 - 鼹鼠输出以下内容:

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.

任何有关如何使其发挥作用的指导将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:2)

不幸的是,这里的答案不是很好。 Moles程序集曾经被检查到源代码控制和测试项目的一部分,然后Moles团队改变了这个功能,因为每次API改变时,人们都必须检查并且在DLL中没有人真正喜欢它,因为它很麻烦和烦人。现在只需要检查Mole的XML清单。鉴于此,你可以想到几个选项:

1-通过将Process选项卡上的Clean Workspace字段设置为None或Outputs来更改您的TFS Build定义,以使您的工作区保持在构建之间,并查看是否有帮助

2-将您的Moles程序集托管在源代码管理之外的某个位置,并将其作为预构建任务复制到有问题的Test项目中。