我在我的开发服务器上设置了CruiseControl.NET 1.4版.每当开发人员检查代码时,它都会进行编译.
现在,我们可以开始向测试人员提供应用程序.我们想使用ClickOnce来分发应用程序,其想法是当测试人员测试应用程序时,他们拥有最新版本.
我找不到使用CruiseControl.NET实现这一目标的方法.我们正在使用MSBUILD来执行构建.
我们已经做到了这一点,可以给你一些启动的指示.
你应该注意的两件事:
MSBuild可以为您生成必要的部署文件.
MSBuild不会将文件部署到FTP或UNC共享.你需要一个单独的步骤.
要使用MSBuild生成ClickOnce清单,以下是您需要发出的命令:
msbuild /target:publish /p:Configuration=Release /p:Platform=AnyCPU; "c:\yourProject.csproj"
这将告诉MSBuild构建您的项目并在bin\Release\YourProject.publish目录中生成ClickOnce部署文件.
剩下的就是将这些文件复制到FTP/UNC共享/任何地方,你们都已经完成了设置.
您可以使用这些MSBuild参数告诉CruiseControl.NET.
然后,您需要一个CruiseControl.NET构建任务来获取生成的部署文件并将它们复制到FTP或UNC共享.我们使用自定义的小型C#控制台程序,但您可以轻松使用Powershell脚本.
谢谢你的帮助.我们实施的最终解决方案从每个答案中略微提出.
我们发现使用简单的批处理文件处理多个环境更容易.我并不是说这是最好的方法,但是对于我们给定的方案和要求,这很有效.使用您的项目名称补充"项目",并使用您的环境名称(开发,测试,阶段,生产等)补充"环境".
这是我们的"ccnet.config"文件的任务区域.
F:\Source\Project\Environment\CruiseControl\CopySettings.bat C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe F:\Source\Project\Environment\ Project.sln /noconsolelogger /p:Configuration=Debug /v:diag Rebuild 0 ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll F:\Source\Project\Environment\CruiseControl\Publish.bat
您将注意到的第一件事是CopySettings.bat运行.这会复制环境的特定设置,例如数据库连接.
接下来,运行标准MSBUILD任务.任何编译错误都会在此处捕获并正常处理.
最后要执行的是Publish.bat.这实际上是从命令行再次执行MSBUILD"重建",并且CruiseControl中的参数会自动传入并构建.接下来,调用MSBUILD作为"发布"目标.在发布重建时,将为发布提供完全相同的参数.这使构建号保持同步.此外,我们的可执行文件命名不同(即 - ProjectDev和ProjectTest).我们最终得到了不同的版本号和名称,这使得ClickOnce能够做到这一点.
Publish.bat的最后一部分将实际文件复制到新的主页.我们不使用publish.htm,因为我们的所有用户都在网络上,我们只是给他们一个桌面上清单文件的快捷方式,他们可以点击并始终运行正确的可执行文件,其中包含一个版本号巡航控制.
这是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开发人员那样的工作方式完成,但确实有效.如果您需要在昨天使用它,它可能是您正在寻找的解决方案.祝好运!