У меня есть проект VS 2005 / MSBuild 2.0 (назовем его «Проект A»), который я должен хранить в VS 2005 (он использует сторонний конструктор VS 2005). На проект A ссылаются одним из проектов в моем новом решении VS 2008 (мы будем называть их «Проект C» и «Решение B» соответственно.) В идеале, я бы хотел объединить строительство проекта A в создание решения B, и Я считаю, что атрибут «ToolsVersion» является ключевым. Итак, подведем итог, вот что мне нужно сделать:
- Запустите сборку решения B либо из командной строки, либо из Visual C # 2008 Express. Очень важно, чтобы он работал через и !
- Пусть Проект C инициирует строительство Проекта А.
- Копировать выходные данные проекта A (библиотеки классов) в проект C.
- Сборка проекта C и оставшихся проектов в решении B.
Вот схема:
MSBuild 3.5 или VS2008 ->
[Решение B (3.5)] ->
[Проект C (3.5)] ->
[Проект A (2.0)] ->
Скопируйте вывод A в C ->
Продолжайте строить решение B
Есть идеи, как мне это настроить? Клипы из рабочих файлов проекта будут очень благодарны! Заранее спасибо!
РЕШЕНИЕ
Вот что нужно было добавить в Project C, чтобы эта работа работала:
<ItemGroup>
<ProjectToBuild Include="..\ProjectA\ProjectA.csproj" />
</ItemGroup>
<Target Name="BeforeBuild">
<MSBuild
Projects="@(ProjectToBuild)"
Targets="Rebuild" ToolsVersion="2.0">
<Output
TaskParameter="TargetOutputs"
ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
<Copy SourceFiles="@(AssembliesBuiltByChildProjects)"
DestinationFolder="$(MSBuildProjectDirectory)"
/>
</Target>
Обратите внимание, что существует известная проблема с получением TargetOutputs решения с задачей MSBuild. Это должно было быть исправлено в MSBuild 3.5, но я предполагаю, что атрибут ToolsVersion вызывает его всплытие. Вот почему я ссылаюсь на ProjectA.csproj напрямую, а не на файл решения.