Cảm ơn tất cả sự giúp đỡ. Giải pháp cuối cùng chúng tôi thực hiện đã mất một chút từ mọi câu trả lời.
Chúng tôi thấy dễ dàng hơn khi xử lý làm việc với nhiều môi trường bằng cách sử dụng các tệp lô đơn giản. Tôi không đề nghị đây là cách tốt nhất để làm điều này, nhưng đối với kịch bản và yêu cầu nhất định của chúng tôi, điều này làm việc tốt. Bổ sung "Project" với tên dự án của bạn và "Environment" với tên môi trường của bạn (dev, test, stage, production, any).
Đây là vùng tác vụ của tệp "ccnet.config" của chúng tôi.
<!-- 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>
Điều đầu tiên bạn sẽ nhận thấy là CopySettings.bat chạy. Điều này sao chép các cài đặt cụ thể cho môi trường, chẳng hạn như các kết nối cơ sở dữ liệu.
Tiếp theo, tác vụ MSBUILD chuẩn sẽ chạy. Bất kỳ lỗi biên dịch nào cũng bị bắt tại đây và được xử lý như bình thường.
Điều cuối cùng cần thực hiện là Publish.bat. Điều này thực sự thực hiện một MSBUILD "xây dựng lại" một lần nữa từ dòng lệnh, và các thông số từ CruiseControl được tự động chuyển vào và xây dựng. Tiếp theo, MSBUILD được gọi cho mục tiêu "xuất bản". Các thông số tương tự chính xác được đưa ra cho xuất bản khi xây dựng lại đã được ban hành. Điều này giúp các số bản dựng được đồng bộ hóa. Ngoài ra, các tệp thi hành của chúng tôi được đặt tên khác nhau (ví dụ: - ProjectDev và ProjectTest). Chúng tôi kết thúc với số phiên bản và tên khác nhau, và điều này cho phép ClickOnce làm điều đó.
Phần cuối cùng của Publish.bat sao chép các tệp thực sự vào nhà mới của họ. Chúng tôi không sử dụng publish.htm vì tất cả người dùng trên mạng, chúng tôi chỉ cung cấp cho họ lối tắt tới tệp kê khai trên máy tính để bàn của họ và họ có thể nhấp và luôn chạy đúng tệp thực thi với số phiên bản có liên quan CruiseControl.
Dưới đây là 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
Và cuối cùng, đây là 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
Như tôi đã nói, nó có thể không được thực hiện cách mà CruiseControl và MSBUILD nhà phát triển đã có ý định điều cần nhưng nó hoạt động. Nếu bạn cần làm việc này ngày hôm qua, đó có thể là giải pháp bạn đang tìm kiếm. Chúc may mắn!
Tôi chỉ muốn chỉ ra rằng điều này hơi lỗi thời. Giả sử rằng bài viết của bạn là chính xác, MSBuild đã được cập nhật để hỗ trợ triển khai cho các cổ phiếu UNC, mà tôi làm trong nhiều dự án đang hoạt động bây giờ. –
Cảm ơn, James. Vâng, điều này ban đầu được trả lời vào năm 2008, khi tất cả điều này là tươi mới và gợi cảm; nó có thể không liên quan 7 năm sau đó. –