我在从CI(Cruise Control)发布WCF服务时遇到问题。
假设我有一个名为“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文件都发布在“publish”文件夹下。
当我在解决方案文件中添加其他服务(我们称之为“WCF-B”)时,问题就出现了。 [编辑] 我在WCF-B中添加了相同的“BeforeBuild”和“AfterBuild”。 [/ Edit] 我从“WCF-B”项目引用了WCF-A ......但是当我使用我使用的相同命令构建解决方案时,“WCF-B”的发布是工作正常。但是不再部署“WCF-A”的跨域文件和svc文件。只有“WCF-A”的汇编才会在“publish \ bin”文件夹下发布。
你们有没有想过为什么会这样?提前致谢。
修改
我认为“项目引用”会产生这个问题 ..但我需要项目引用而不是从代理类调用服务。由于两个服务都将托管在同一台服务器上,因此我更喜欢通过服务调用进行dll-reference。
答案 0 :(得分:0)
看起来好像WCF-A的BeforeBuild
目标正在删除WCF-A的文件(假设发布目录解析到同一目录)并且程序集WCF-A无法删除,因为它由WCF-B引用并在使用中。
您可以尝试使用/v:d
甚至/v:diag
来提高日志详细程度,以获取更多信息。
E:\..\Code\>msbuild MyServices.sln /t:Clean;Rebuild /v:d