Использование сборки с TFS2010 в проектах, использующих сборки родинок, завершается неудачно с -1002, так как не удается разрешить ссылку - PullRequest
3 голосов
/ 08 марта 2011

После долгих игр мне удалось заставить TFS запускать сборки на всех моих проектах, кроме тестовых. У них есть родинка в них.

Ошибки, которые я получаю,

C: \ Program Files \ Microsoft Moles \ bin \ Microsoft.Moles.targets (79):
Команда "" C: \ Program Files \ Microsoft Moles \ bin \ moles.exe "
@ "C: \ Строит \ 2 \ CV2 \ DevBranchBuild \ Sources \ CV.BL.Tests \ OBJ \ Release \ Родинки \ 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 и родинок.

У меня также есть файл CV.DAL.moles, зарегистрированный в TFS (не сборка). Все отлично собирается на моей локальной машине. Машина, которую я использую для сборки, имеет точно такую ​​же конфигурацию. Точно я имею в виду, что один 32-битный, а другой 64-битный: o (серьезный надзор там).

Есть идеи?

Это делает pex и родинки совершенно бесполезными, так как они ломают стробированные checkins при объединении ветвей, что является большим позором, поскольку я потратил на них приличное количество времени.

EDIT

Какие каталоги molesAssemblies?
Папка установки для родинок или каталогов под проект?
Папка установки содержит одинаковые файлы и размеры файлов на обеих машинах.

Ответы [ 2 ]

3 голосов
/ 23 марта 2011

Это может быть одной из двух проблем - я столкнулся с ними обоими некоторое время назад:

(один) Одна из ваших зависимостей помечена как 32-битная. Это может быть cv.dal.dll или любая из его зависимостей. Moles.exe должен загрузить сборку для выполнения - не уверен, почему он не использует Load.RefrectionOnly - и поскольку moles.exe является ИЛЛОННЫМ, он выполняется как 64-разрядный процесс на 64-разрядной машине. Это заставляет поколение родинок терпеть неудачу.

Обходной путь для этого - установить moles.exe только на 32 бита:

corflags moles.exe / Force / 32BIT +

(два) Если вы используете параллельную сборку (например, в вашем файле .msbuild у вас есть параметр BuildInParallel = "true", или вы запускаете msbuild.exe с параметром / m) И вы создаете родинки в PreBuildEvent проекта модульного теста, у вас возникнут проблемы с целями msbuild. PreBuildEvent выполняется до разрешения ссылок, а проверка межпроектных зависимостей выполняется во время разрешения ссылок, поэтому существует вероятность того, что PreBuildEvent начнет выполняться до завершения построения зависимых проектов.

Нет хорошего обходного пути для этого. Вы можете использовать непараллельную сборку (что замедлит сборку) или включить предварительно сгенерированный файл * .moles.dll в систему управления исходным кодом (которую вам придется поддерживать и обновлять каждый раз, когда вы прикасаетесь к отобранной сборке).

1 голос
/ 15 сентября 2011

Раньше была похожая проблема со старыми версиями Moles. Добавление disableCache = "true" в файл .moles устранило эти проблемы: http://social.msdn.microsoft.com/Forums/en-US/pex/thread/a6d9a67b-0813-4392-a5dd-bea6eb479eea

...