Dzięki za wszelką pomoc. Ostateczne rozwiązanie, które wdrożyliśmy, wzięło trochę z każdej odpowiedzi.
Łatwiej nam było poradzić sobie z obsługą wielu środowisk przy użyciu prostych plików wsadowych. Nie sugeruję, że jest to najlepszy sposób na zrobienie tego, ale dla naszego podanego scenariusza i wymagań, to działało dobrze. Uzupełnij "Projekt" o nazwę projektu i "Środowisko" za pomocą nazwy środowiska (programista, test, etap, produkcja, cokolwiek).
Oto obszar zadań naszego pliku "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>
Pierwszą rzeczą, jaką można zauważyć jest to, że CopySettings.bat biegnie. Spowoduje to skopiowanie określonych ustawień dla środowiska, takich jak połączenia z bazą danych.
Następnie uruchamiane jest standardowe zadanie MSBUILD. Wszelkie błędy kompilacji są tutaj przechwytywane i traktowane jako normalne.
Ostatnią rzeczą do wykonania jest Publish.bat. To faktycznie wykonuje "odbudować" MSBUILD ponownie z linii poleceń, a parametry z CruiseControl są automatycznie przekazywane i budowane. Następnie MSBUILD jest nazywany celem "publikowania". Dokładnie te same parametry są podawane do publikowania po wydaniu przebudowy. Dzięki temu numery kompilacji są zsynchronizowane. Ponadto nasze pliki wykonywalne mają inną nazwę (np. - ProjectDev i ProjectTest). Kończymy różnymi numerami wersji i nazwami, a to pozwala ClickOnce zrobić to samo.
Ostatnia część pliku Publish.bat kopiuje rzeczywiste pliki do nowych domów. Nie używamy pliku publish.htm, ponieważ wszyscy nasi użytkownicy są w sieci, po prostu dajemy im skrót do pliku manifestu na ich pulpicie i mogą kliknąć i zawsze uruchamiać poprawny plik wykonywalny z numerem wersji, który wiąże się z Tempomat.
Oto 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
I wreszcie, tutaj jest 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
Tak jak mówiłem, to prawdopodobnie nie jest zrobione tak, że deweloperzy CruiseControl i msbuild zamierzał rzeczy działa, ale działa. Jeśli chcesz wczytać to wczoraj, może to być rozwiązanie, którego szukasz. Powodzenia!
Chcę tylko podkreślić, że jest to nieco nieaktualne. Zakładając, że twój post był poprawny, MSBuild został zaktualizowany w celu obsługi wdrażania do akcji UNC, co robię teraz w wielu aktywnych projektach. –
Dzięki, James. Tak, odpowiedź na to pytanie pojawiła się w 2008 roku, kiedy wszystko to było świeże i seksowne; może to nie być istotne 7 lat później. –