我正試圖決定我在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