2013-06-22 3 views
3

Я прочесываю интернет для ответа на этот вопрос и действительно могу воспользоваться помощью.Тип 'xxx' определен в сборке, на которую не ссылаются

Я уже смотрел другие сообщения об этой ошибке, и ни один из этих ответов не помог мне.

Полная ошибка,

типа «ххх» определяется в сборке, которая не ссылается. Вы должны добавить ссылку на сборку 'xxx, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null'.

Решение строит локально, но ошибка возникает, когда я запускаю сборку на сервере сборки.

Вот что я сделал до сих пор в попытке решить эту проблему:

  • Обеспечил все ссылки на проекты являются правильными (Если бы архитектор рассмотреть его со мной)
  • Изменено свойство «SpecificVersion» истину
  • Удалена ссылка и добавить его обратно (в VS2012 и редактировать сам .csproj файл)
  • Встроенное решение локальны на сервере сборки, она проходит
  • EDIT - Я должен также упомянуть, я построил это решение на двух разных серверах сборки и все еще получаю ту же ошибку

Я использую VS2012 и TFS2012, чтобы сделать это.

Я бы очень признателен за любую помощь, спасибо.

* UPDATE: * Я только что сделал MSBuild на сервере сборки, но изменил конфигурацию на «Release» и смог воспроизвести части ошибки. Однако некоторые ключевые различия заключаются в том, что версия, которую он ищет, внезапно 1.3.1.15 вместо 0.0.0.0, а PublicKeyToken больше не является нулевым. Кто-нибудь знает, что это может означать? Версия сборки должна быть 0.0.0.0.

+2

Вы проверили, совместимы ли платформы? (т. е. убедиться, что сборка .NET 4.0 не ссылается на сборку .NET 4.5 или сборка профиля клиента .NET 4 не ссылается на полную сборку .NET 4) –

+0

Да, все выполняется под .NET 4.0 – Albert

ответ

5

Итак, после ввода нескольких часов с моим архитектором мы обнаружили проблему.Наши разработчики имели несколько копий одной и той же DLL, зарытой в различные папки в нашем контроле источника. Один из проектов - ссылка на неверный .dll.

После исправления ссылок и удаления дополнительных необработанных DLL-файлов ошибка исчезла, и наши сборки, наконец, работают! :)

+5

Используйте Nuget для этого - сделайте вашу жизнь намного проще. –

0

Вы упомянули, что пытались создать решение на тестовом сервере. Вы использовали визуальную студию 2012 для создания решения или вы действительно запускали msbuild?

Точный тест будет использовать MSBuild похожее на это:

MSBuild MySolution.sln/р: Конфигурация = "Debug"/р: Platform = "CPU Любой"

Вы действительно можете получить точную команду, просмотрев журналы сборки для TFS Build, он перечислит команду сборки, которую он выполнил, и просто запустите ее самостоятельно (вам нужно будет удалить дополнительные материалы, добавляемые TFS для добавления в журнал)

После этого вы можете запустить ту же команду на вашей локальной машине и посмотреть, проходит ли она.

Еще одна вещь, которую следует попробовать - установить «копировать локально» для всех сборок в проекте.

Надеюсь, это поможет!

+0

Я использовал MSBuild на тестовом сервере, и я только что проверил настройки «Копировать локальные», и они уже установлены в true для проекта. :( – Albert

+0

, поэтому он строит с использованием msbuild на сервере сборки? Также вы используете стандартный xaml для сборки tfs или это настраиваемый/измененный? Теперь о конфигурации сборки: какова ваша настройка для «Clean Workspace» в параметрах процесса сборки «Когда сборка завершается с ошибкой, вы видите весь исходный код в« Build Agent Folder »и это то, что вы компилируете при запуске MSBuild? – Woland

+0

Да, он строит с помощью msbuild на сервере сборки. Я использую стандартный шаблон процесса xaml , и мое «Чистое рабочее пространство» настроено на «Выходы». Но я также установил его «Все» и побежал сборку без везения. Я проверил папку сборки на сервере, и у нее есть все исходный код при запуске msbuild. – Albert