Ответ 1
Спасибо за помощь. Окончательное решение, которое мы выполнили, взяло немного от каждого ответа.
Нам было проще обрабатывать работу с несколькими средами с помощью простых пакетных файлов. Я не предлагаю, что это лучший способ сделать это, но для нашего сценария и требований это сработало хорошо. Дополните "Проект" своим именем проекта и "Среда" с вашим именем среды (dev, test, stage, production, whatever).
Вот область задач нашего файла ccnet.config.
<!-- override settings -->
<exec>
<executable>F:\Source\Project\Environment\CruiseControl\CopySettings.bat</executable>
</exec>
<!-- compile -->
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
<workingDirectory>F:\Source\Project\Environment\</workingDirectory>
<projectFile>Project.sln</projectFile>
<buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
<targets>Rebuild</targets>
<timeout>0</timeout>
<logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>
<!-- clickonce publish -->
<exec>
<executable>F:\Source\Project\Environment\CruiseControl\Publish.bat</executable>
</exec>
Первое, что вы заметите, это то, что выполняется CopySettings.bat. Это копирует определенные настройки для среды, такие как соединения с базой данных.
Далее выполняется стандартная задача MSBUILD. Любые ошибки компиляции пойманы здесь и обрабатываются как обычно.
Последнее, что нужно выполнить, - Publish.bat. Это фактически выполняет перезагрузку MSBUILD из командной строки, и параметры из CruiseControl автоматически передаются и создаются. Затем MSBUILD вызывается для цели "публикации". Точно такие же параметры присваиваются публикации, так как была создана перестройка. Это позволяет синхронизировать номера сборки. Кроме того, наши исполняемые файлы называются по-разному (т.е. ProjectDev и ProjectTest). Мы заканчиваем разными номерами и именами версий, и это позволяет ClickOnce выполнять свою работу.
Последняя часть Publish.bat копирует фактические файлы в их новые дома. Мы не используем publish.htm, поскольку все наши пользователи находятся в сети, мы просто даем им ярлык файла манифеста на рабочем столе, и они могут щелкнуть и всегда запускать правильный исполняемый файл с номером версии, который связывается в CruiseControl.
Здесь находится CopySettings.bat
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\app.config" "F:\Source\Project\Environment\Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.Designer.vb" "F:\Source\Project\Environment\Project\My Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.settings" "F:\Source\Project\Environment\Project\My Project" /Y /I /R
И, наконец, здесь Publish.bat
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:rebuild "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationRevision=%CCNetLabel% /property:AssemblyName="ProjectEnvironment" /property:PublishUrl="\\Server\bin\Project\Environment\\"
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:publish "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationVersion="1.0.0.%CCNetLabel%" /property:AssemblyVersion="1.0.0.%CCNetLabel%" /property:AssemblyName="ProjectEnvironment"
XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish" "F:\Binary\Project\Environment" /Y /I
XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish\Application Files" "F:\Binary\Project\Environment\Application Files" /Y /I /S
Как я уже сказал, это, вероятно, не так, как разработчики CruiseControl и MSBUILD намеревались работать, но это работает. Если вам нужно получить эту работу вчера, это может быть решение, которое вы ищете. Удачи!