2008-11-05 19 views
5

我有一种情况,我想将输出程序集从一个项目复制到使用MSBuild的目标应用程序的输出目录中,而不在我的MSBuild中硬编码路径复制任务。这里的情景:MSBuild将另一个项目的输出复制到当前项目的输出中

  • 项目A - Web应用程序项目
  • 项目B - 德尔接口项目
  • 项目C - 德尔实施项目

有一个业务层过,但没有我期待解决的MSBuild问题的相关性。

我的业务层有一个对我的Dal.Interface项目的参考。我的web项目有一个对业务层的引用,现在,构建将把业务层和Dal.Interface项目拉到输出中。到现在为止还挺好。现在为了让Web应用程序运行,它需要Dal实现。我不想在任何地方引用实现,因为我想强制编码到接口,没有引用意味着它不会显示在智能感知等。

所以我想我可以通过MSBuild副本来处理作为AfterBuild任务运行(我有Dal实现设置在Web项目构建时构建,仅仅未被引用)。我不想在MSBuild参数中硬编码路径或其他任何东西,所以我想弄清楚如何从Web应用程序项目的MSBuild文件中引用Dal项目的输出。

因此,基于以上这提到的项目是什么,我想看看发生了:

  1. 的Web应用程序的构建被踢掉
  2. 所有必需项目筹建(已配置的,所以这样做)
  3. 的MSBuild“AfterBuild”任务拉开序幕,并从项目C(DAL实施)输出复制到项目A(Web应用程序)

部分的Bin目录3就是我卡住了。

我确信这可以做到,我只是没有找到一个很好的参考帮助。预先感谢您的帮助。

回答

8

我已经完成了这项工作,尽管我很想找到一个更清晰的解决方案,它能够在MSBuild内部(如$(TargetDir)等)内建参数的优点,但指向我想抓取输出的项目对于)。总之,这里是我做了什么:

<Target Name="AfterBuild"> 
<Copy SourceFiles="$(SolutionDir)MyProject.Dal.Linq\bin\$(Configuration)\MyProject.Dal.Linq.dll" DestinationFolder="$(TargetDir)"/> 
</Target> 

我很想看到一个清晰的解决方案,但是这应该现在就做。

+0

I + 1'd这个年代以前。正如你所建议的,这不是干净的 - 显然,如果OutDir发生变化,这会中断。当使用TeamBuild进行构建时。 (以防其他人看到这一点,并没有意识到缺点)。另请参阅http://stackoverflow.com/questions/2325598/determining-outputs-of-a-projectreference-in-msbuild/2325620#2325620 – 2010-02-24 11:41:52

+0

请参阅http:// stackoverflow。com/questions/2325598/determine-outputs-a-projectreference-in-msbuild/2325620#2325620一个解决我提到的问题的方法的示例 – 2010-02-24 13:08:34

0

所以,你想有一个参考,但没有它在VS中可见。因此,您希望在需要时构建它,并将其复制到任何其他Content文件的输出中。你可以这样做:

<Target Name="IncludeDALImplementation" BeforeTargets="AfterBuild"> 
    <MSBuild Projects="..\DalImplementation\DAL.csproj" BuildInParallel="$(BuildInParallel)" Targets="Build"> 
    <Output TaskParameter="TargetOutputs" ItemName="DalImplementationOutput" /> 
    </MSBuild> 

    <ItemGroup> 
    <Content Include="@(DalImplementationOutput)" /> 
    </ItemGroup> 
</Target> 
相关问题