我正试图决定我在MsBuild与Nant之间的战争。我开始:停止服务,部署一些文件,重新启动服务。只要看看这两条链接,在南特这件事情就容易多了。nant与msbuild:停止服务
的MSBuild:Example of using Service Exists MSBuild task in Microsoft.Sdc.Tasks?
<target name="service_exists">
<script language="C#">
<references>
<include name="System.ServiceProcess.dll" />
</references>
<code><![CDATA[
public static void ScriptMain(Project project) {
String serviceName = project.Properties["service.name"];
project.Properties["service.exists"] = "false";
project.Properties["service.running"] = "false";
System.ServiceProcess.ServiceController[] scServices;
scServices = System.ServiceProcess.ServiceController.GetServices();
foreach (System.ServiceProcess.ServiceController scTemp in scServices)
{
etc...
南特:http://ryepup.unwashedmeme.com/blog/2007/01/04/restart-a-windows-service-remotely/
<!-- Send the stop request -->
<exec program="sc.exe">
<arg line="\\server stop shibd_Default"/>
</exec>
<!-- Sleep a little bit, to give the service a chance to stop -->
<sleep seconds="5"/>
<!-- Send the start request -->
<exec program="sc.exe">
<arg line="\\server start shibd_Default"/>
</exec>
不知多所社区同意我的看法。在南特完成这样的基本事情要容易得多吗?当然是这样。在CDATA块的C#代码? WTF?
我们目前的构建过程是a)大量的bat文件b)大量的诅咒。我真的很想找到一个很好的替代品,但那个MsBuild的东西看起来像是我眼中的一个痛苦的世界。我正在考虑的方式是在Nant中构建脚本,然后使用MsBuild来完成需要完成的任何.NET构建。
一个重要的问题:在脚本运行之前哪一个更好地捕捉脚本中的错误?我正在考虑自己在这里滚动,这是非常重要的一部分:排列所有数据,并确保它在尝试运行之前有意义。
你能然后换行Exec的在foreach?也许这就是我的帖子中奇怪的命令脚本的原因? – jcollum 2010-02-04 16:14:49
MSBuild并没有真正的foreach,因为它是声明性的,不是强制性的。你需要做一些事情,比如' '你有一个' '... –
2010-05-28 15:28:21