Запуск Moles на сервере сборки - есть идеи, как пропустить генерацию кода? - PullRequest
3 голосов
/ 23 ноября 2011

Выполнение кротов 0,94 для исключения некоторых типов в сборках сторонних производителей, которые в противном случае было бы трудно проверить. Прекрасно работает локально, тесты пройдены, и решение отлично компилируется. Первый раз, когда он компилируется, это занимает довольно много времени, потому что он генерирует сборки родинок (помещает их в подпапку, называемую \ 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.

Буду признателен за любые указания относительно того, что я могу сделать, чтобы получить эту работу.

Спасибо.

1 Ответ

2 голосов
/ 23 ноября 2011

К сожалению, здесь нет хорошего ответа. Раньше сборки Moles проверялись в системе контроля версий и являлись частью тестового проекта, затем команда Moles меняла эту функциональность, поскольку каждый раз, когда менялся API, людям приходилось проверять и в DLL, и никому это не нравилось, поскольку это было громоздким и раздражающим. Теперь проверен только XML-манифест того, что для Mole. Учитывая это, у меня есть пара вариантов, о которых я могу подумать:

1- Измените определение сборки TFS, чтобы сохранить рабочее пространство между сборками, установив для поля Чистая рабочая область на вкладке Процесс значение Нет или Выходы и посмотрите, поможет ли это

2- Поместите ваши сборки Moles где-нибудь вне контроля исходного кода и скопируйте их в качестве задачи перед сборкой в ​​тестовом проекте, создающем проблемы.

...