Автоматическая сборка проекта
От: Аноним  
Дата: 19.08.11 09:34
Оценка:
Привет.
Уже тему поднимал, только ее удалили, не ответив (или перенесли? если так, извиняюсь за дубликат)

Мне необходимо из консоли собирать MSVS2005/2010 проекты (их до 5+) и все в одном sln
Использую MSBuild для этих целей. все прекрасно работает, только одно НО:
у меня в настройках стоит кастомный путь для бинарников (<root>/bin/<project_name>/<configuration>) и мусора от компиляции (<root>/tmp/<project_name>/<configuration>).
Если собирать в студии, то все ок.
При компилировании с помощью MSBuild (версия 2.0.5..) корневой путь <root> меняется на корень подпроекта. Т.е. в итоге иерархия подпроекта /bin/<project_name>/<configuration> создается не в <root>, а в папке проекта.

В параметрах не нашел ничего подходящего, кроме OutDir. Но ее изменение не приводит ни к каким изменениям
делал так: /p:OutDir=<root>

Спасибо за ответы
Re: $(SolutionDir)
От: Qbit86 Кипр
Дата: 19.08.11 09:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>у меня в настройках стоит кастомный путь для бинарников (<root>/bin/<project_name>/<configuration>) и мусора от компиляции (<root>/tmp/<project_name>/<configuration>).

А>Если собирать в студии, то все ок.
А>При компилировании с помощью MSBuild (версия 2.0.5..) корневой путь <root> меняется на корень подпроекта. Т.е. в итоге иерархия подпроекта /bin/<project_name>/<configuration> создается не в <root>, а в папке проекта.

У меня сборка идёт в $(SolutionDir)Bin\$(Configuration)\. Если собираю из Студии, то переменная $(SolutionDir) определена. Если собираю без Студии, то команде MsBuild.exe передаю эту переменную (/p:SolutionDir=...) на вход, так как она не определена.
Глаза у меня добрые, но рубашка — смирительная!
Re: Автоматическая сборка проекта
От: Аноним  
Дата: 19.08.11 09:43
Оценка:
Файл sln лежит в <root>, в то время, как vcproj лежат в <root>/<project_name>
Еще добавлю, что в проектах настройки такие: $(SolutionDir)bin\
Можно хоть как-то во время сборки изменить значение $(SolutionDir)?
Re[2]: $(SolutionDir)
От: Аноним  
Дата: 19.08.11 10:08
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>У меня сборка идёт в $(SolutionDir)Bin\$(Configuration)\. Если собираю из Студии, то переменная $(SolutionDir) определена. Если собираю без Студии, то команде MsBuild.exe передаю эту переменную (/p:SolutionDir=...) на вход, так как она не определена.


Пробовал уже — не работает. Передаю /p:SolutionDir=<root>
Все равно создает каталоги не в <root>
А можно посмотреть остальные параметры, с которыми у вас работает компиляция?
Re[3]: $(SolutionDir)
От: Qbit86 Кипр
Дата: 19.08.11 10:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А можно посмотреть остальные параметры, с которыми у вас работает компиляция?


Ничего особенного. Например:
/p:Configuration=Debug /p:FxCopInspection=true /p:NUnitInspection=true
/p:WarningsAsErrors="1572,1573,1734,1587,1591" /p:SolutionDir=$(WorkingDirRoot)MyProject\ /verbosity:normal /noconlog

$(WorkingDirRoot) здесь — это переменная, определённая в проекте CruiseControl, равна E:\Users\AccountForPerformingBuilds\.
Глаза у меня добрые, но рубашка — смирительная!
Re[4]: $(SolutionDir)
От: Аноним  
Дата: 19.08.11 10:34
Оценка:
Здравствуйте, Qbit86, Вы писали:

У меня так не работает.
Нашел костыль — скриптом генерирую sln файл нужной конфигурации и его выполняю в нужной директории (где оригинальный sln).
В итоге все получается нормально.
А есть ли вариант из sln исключить один из проектов при компиляции? тогда ничего не пришлось и генерировать...
Re[5]: $(SolutionDir)
От: Qbit86 Кипр
Дата: 19.08.11 10:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А есть ли вариант из sln исключить один из проектов при компиляции? тогда ничего не пришлось и генерировать...


MsBuild-скрипты — это csproj-файлы, а sln-файл — это левая legacy фигня непонятного формата. Можно обойтись вовсе без неё. Например, вроде есть утилита, которая по sln-файлу позволяет сгенерировать MsBuild-скрипт. Или можно на вход системы сборки просто передать «источник зависимостей», скажем, MyLib.Demo.csproj, который зависит от MyLib.csproj, которая потянет за собой сборку MyLib.Core.csproj, etc.
Глаза у меня добрые, но рубашка — смирительная!
Re[6]: $(SolutionDir)
От: Аноним  
Дата: 19.08.11 11:10
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Здравствуйте, Аноним, Вы писали:


А>>А есть ли вариант из sln исключить один из проектов при компиляции? тогда ничего не пришлось и генерировать...


Q>MsBuild-скрипты — это csproj-файлы, а sln-файл — это левая legacy фигня непонятного формата. Можно обойтись вовсе без неё. Например, вроде есть утилита, которая по sln-файлу позволяет сгенерировать MsBuild-скрипт. Или можно на вход системы сборки просто передать «источник зависимостей», скажем, MyLib.Demo.csproj, который зависит от MyLib.csproj, которая потянет за собой сборку MyLib.Core.csproj, etc.


Мне нужно выборочно делать сборку подпроектов. Легче сгенерировать sln файл на 10 строчек, чем то, что выдает этот конвертер.
Просто хочется еще проще. кстати, проект С++
Re[7]: $(SolutionDir)
От: Qbit86 Кипр
Дата: 19.08.11 11:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Просто хочется еще проще. кстати, проект С++


Хм!.. С++-проекты в последней версии Студии (vcprojx) — это msbuild-скрипты; а проекты предыдущих версий (vcproj) — это скрипты устаревшей deprecated системы сборки vcbuild. К ним сказанное мной выше неприменимо.
Глаза у меня добрые, но рубашка — смирительная!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.