none
Сборка проекта из MSBuild и IDE RRS feed

  • Вопрос

  • Добрый день!

    Я не уверен, в тот ли форум отправляю вопрос.

    Есть проект, который раньше все время собирался только из под IDE. В проекте используются сборки сторонних разработчиков, которые устанавливаются на компьютерах наших разработчиках при помощи инсталляторов. Проект хранится в Subversion.

    Теперь нужно сделать сервер сборки, на котором проект выкачивается из Subversion и компилируется. На этом сервере будет следующее:

    1. Клиент Subversion
    2. .Net Framework (для компиляции)
    3. Папка со сборками сторонних разработчиков
    В файле csproj прописаны ссылки (references) на используемые сборки (сторонних разработчиков). У некоторых из них указан HintPath. Я запускаю проект на компиляцию примерно следующим образом:

    MSBuild c:\path1\project.sln /property:"ReferencePath=c:\Path2; c:\Path3;"

    Но те сборки, для которых в csproj указан HintPath, не находятся. Даже если сборка AssemblyA находится в c:\Path3, то я получаю сообщение:

    For SearchPath "C:\Path3".

    Considered "C:\Path3\AssemblyA.dll", but its name "AssemblyA, Version=X.Y.Z.0, Culture=neutral, PublicKeyToken=zzzzzaaasssdddfff" didn't match.


    Но если HintPath удалить, то все компилируется нормально.

    Я читал вот это, где написано, что ReferencePath проверяется раньше, чем HintPath (правда, там имеется в виду та, которая из .user/targets file. Это имеет значение?). Кроме того, я пробовал использовать AdditionalReferencePath вместо ReferencePath - не помогло.

    Еще я читал вот этот топик, в котором вообще рекомендуется поместить все сторонние сборки в систему контроля версий и использовать относительные пути.

    Лучший для меня вариант - это передавать через командрую строку путь к папке, в которой находятся сборки (ну или, может быть, установить переменную среды окружения). Как сделать мне это правильно? Или действительно, мне следует поместить сборки в репозитарий и использовать относительные пути?

    Одно из требований к системе сборки заключается в том, что собираться проект должен как из под IDE так и из под MSBuild без исправления файла csproj.

    Спасибо!
    22 февраля 2012 г. 9:52

Ответы

  • Положите сборки в репозиторий и используйте относительные пути. Студия сама будет вписывать относительные HintPath, если сборки лежат на одном диске с проектами.

    Иначе вы скоро окажетесь в ситуации, когда вам нужно будет собрать версию месячной давности, а сборки в C:\Path3 уже слишком новые. Судя по ошибке (не совпало полное имя - т.е. или не та версия или не тот PublicKeyToken) - вы уже в ней оказались :)

    • Помечено в качестве ответа tikskit 22 февраля 2012 г. 16:39
    22 февраля 2012 г. 11:39
    Модератор

Все ответы

  • Положите сборки в репозиторий и используйте относительные пути. Студия сама будет вписывать относительные HintPath, если сборки лежат на одном диске с проектами.

    Иначе вы скоро окажетесь в ситуации, когда вам нужно будет собрать версию месячной давности, а сборки в C:\Path3 уже слишком новые. Судя по ошибке (не совпало полное имя - т.е. или не та версия или не тот PublicKeyToken) - вы уже в ней оказались :)

    • Помечено в качестве ответа tikskit 22 февраля 2012 г. 16:39
    22 февраля 2012 г. 11:39
    Модератор
  • Да, действительно, я запутался с версиями сборок. Когда разобрался, оказалось, что ReferencePath работает, даже когда указан HintPath.
    22 февраля 2012 г. 16:38