2011-08-01 57 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 –