VS2010: Как выполнять ‘Publish’ из Team Build если у вас есть C++ проекты?
Ноябрь 16, 2009 Добавить комментарий
У меня есть solution, в котором находятся разнородные проекты – C#/C++, EXE/DLL/Library. В общем, практически весь букет. Да, и самое главное – там ещё есть Сloud Service, т.е. Azure. И всё это собирается при помощи Team Build 2008.
В какой-то момент мне очень захотелось получать в результате сборки готовый пакет для развёртывания в Azure. Для этого надо выполнять target “Publish” для .ccproj проектов. Добавил в tfsbuild.proj следующую строчку:
<SolutionToPublish Include=“$(SolutionRoot)\MySolution.sln“/>
Всё было бы хорошо, но:
- По-умолчанию MSBuild считает необходимым публиковать все EXE проекты. Сделано это было для .Net приложений. В этом случае он генерирует ClickOnce manifest.
- Начиная с версии 10, в Visual Studio все C++ проекты перешли на MSBuild (ура, VCBUILD прощай!), но в данном случае это помешало.
В силу вышеперечисленных обстоятельств, некто, не будем показывать на него пальцами, пытается построить ClickOnce manifest для C++ EXE. Естественно, с достаточно предсказуемым результатом – манифеста то нет!
Внимательное исследование файла ‘ Microsoft.Common.targets’ показало, что проблему можно вылечить указав
<PublishableProject>false</PublishableProject>
в файле .vcxproj. Я вставил определение этого свойства сразу после определения _ProjectFileVersion:
<PropertyGroup>
<_ProjectFileVersion>10.0.20728.1</_ProjectFileVersion>
<PublishableProject>false</PublishableProject>
<OutDir Condition=“‘$(Configuration)|$(Platform)’==’Debug|Win32′“>..\..\bin\$(Configuration)\</OutDir>
…
Всё вышесказнное справедливо для Visual Studio 2010 Beta1/Beta2.





