Спасибо за помощь. Окончательное решение, которое мы реализовали, получило немного от каждого ответа.
Нам было проще работать с несколькими средами с помощью простых пакетных файлов. Я не предполагаю, что это лучший способ сделать это, но для нашего данного сценария и требований это сработало хорошо. Дополните «Project» названием вашего проекта, а «Environment» - названием среды (dev, test, stage, production, чем угодно).
Вот область задач нашего файла "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 намеревались работать, но оно работает. Если вам нужно, чтобы это работало вчера, это может быть решением, которое вы ищете. Удачи!