2010-10-08 26 views
0

我有一个使用NServicebus的解决方案,该解决方案至少包含3个对此方案感兴趣的项目;一个发布者,一个扫描和一个web服务。基本上,扫描(一个或多个)收集数据供发布者存储在数据库中,然后发布给订阅者。 webservice允许访问存储在发布者数据库中的数据。将构建拆分为多个输出目录

当我在开发箱上构建这个解决方案并部署到测试环境时,一切都很好。上周我们开始在构建服务器上使用自动构建,并且在构建成功时,这些服务不会在测试环境中启动。我发现这是因为NServicesBus使用标记接口。 NServicesBus通用主机使用反射来检查与这些标记的主机位于同一目录中的程序集,以便知道哪一个启动。与我的本地构建不同,构建服务器不会将每个项目构建到它自己的bin目录中,而只是将所有程序集转储到一个bin目录中。由于现在有多个类需要由主机启动,因此无法运行。另外,Web服务有更多的程序集要包括发布程序和扫描需要,所以最终结果是将相同的程序集部署到三个不同的目录。这是没有必要的,也不起作用。

我一直在修改构建像这样来解决这个问题,但它是单调乏味的,它不是改变宽容:

<CreateItem Include="$(OutDir)*.*" Exclude="$(OutDir)BOHSweep*"> 
    <Output ItemName="PublisherFilesToCopy" TaskParameter="Include" /> 
</CreateItem> 

<CreateItem Include="$(OutDir)*.*" Exclude="$(OutDir)InventoryPublisher*"> 
    <Output ItemName="BOHSweepFilesToCopy" TaskParameter="Include" /> 
</CreateItem> 

<Copy SourceFiles="@(PublisherFilesToCopy)" DestinationFolder="\\XXXX\Transmittals\BOHPublisher\Test\%(RecursiveDir)" /> 
<Copy SourceFiles="@(BOHSweepFilesToCopy)" DestinationFolder="\\XXXX\Transmittals\BOHSweep\Test\%(RecursiveDir)" /> 

就如何解决这个问题的任何建议,优雅?

+0

什么是你的构建服务器,以及为何它没有建立每个项目单独的bin目录?我们使用CruiseControl.NET来构建我们的Visual Studio解决方案和MSBuild,它工作得很好。 – 2010-10-08 14:07:12

回答