2011-08-01 95 views
0

我在與CI(巡航控制)..發佈WCF服務問題SVC,XML沒有被部署

比方說,我有一個名爲「WCF-A」一個WCF項目。我在「WCF-A」的csproj中放入以下行:

<Target Name="BeforeBuild"> 
    <Message Text="##############Before build##################" Importance="high" /> 
    <RemoveDir Directories="publish" ContinueOnError="true" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    <Message Text="##############After build##################$(OutputFolder)" Importance="high" /> 
    <MSBuild Projects="$(ProjectName).csproj" Targets="ResolveReferences;_CopyWebApplication" Properties="WebProjectOutputDir=publish\;OutDir=publish\bin\" /> 
</Target> 

我使用以下命令從命令行構建我的服務。 (請注意,我們使用CI,但爲了使我的問題簡單,我將使用命令行。)

E:\..\Code\>msbuild MyServices.sln /t:Clean;Rebuild 

它完美和所有組件,跨域XML,SVC文件下的「發佈」文件夾,發佈。

當我在解決方案文件中添加其他服務時(我們稱之爲「WCF-B」),問題就出現了。 [編輯]我在WCF-B中添加了相同的「BeforeBuild」和「AfterBuild」。 [/編輯]我從「WCF-B」項目引用的WCF-A ...但是當我用我使用的相同命令構建解決方案時,「WCF-B」的發佈工作正常。但「WCF-A」的跨域文件和svc文件不再被部署。 「發佈\ bin」文件夾下僅發佈「WCF-A」的程序集。

你們有什麼想法爲什麼會這樣?提前致謝。

編輯

我認爲有「工程索引」 造成這個問題。但我需要項目的參考,而不是調用從代理類的服務。由於這兩個服務都將託管在同一臺服務器上,因此我更願意使用dll參考而不是服務調用。

+1

您是否向您的WCF-B服務添加了相同的'BeforeBuild'和'AfterBuild'目標? –

+0

是的。我添加了我在WCF-B中發佈的相同代碼。 –

回答

0

看起來好像WCF-A的文件被通過WCF-B的BeforeBuild目標刪除(假設發佈目錄解析爲相同的目錄),並且所述組件WCF-A不能被刪除,因爲它由WCF-B引用並在使用中。

您可能會嘗試使用/v:d甚至/v:diag來提高日誌冗長度以獲取更多信息。

E:\..\Code\>msbuild MyServices.sln /t:Clean;Rebuild /v:d 
+0

我的猜測是,當MSBuild或我添加的任務可能檢測到WCF-A正在被WCF-B引用時。因此,它不會將WCF-A視爲Web服務項目,並將WCF-A視爲類庫,以便它僅生成dll而不處理svc文件。你怎麼看?或者,我在錯誤的方向? –

+0

命令行的長度是有限的..如果日誌寫在文件中會很好.. :) –

+0

好的。我試着用這個命令E:\ Code \ trunk \ Silverlight \ Services> msbuild Memolife.Services.sln/t:Clean; Rebuil d/v:d /l:FileLogger,Microsoft.Build.Engine;logfile=MyLog.log –