我有一种情况,我希望使用MSBuild将输出程序集从一个项目复制到目标应用程序的输出目录中,而不需要在MSBuild Copy任务中使用硬编码路径。这是场景:
还有一个Business层,但与我想要解决的MSBuild问题无关。
我的业务层引用了我的Dal.Interface项目。我的Web项目有一个对Business层的引用,并且就目前而言,执行构建会将业务层和Dal.Interface项目拉入输出。到现在为止还挺好。现在,为了运行Web应用程序,它需要Dal实现。我不想在任何地方引用实现,因为我想对接口强制执行编码而没有引用意味着它不会出现在intellisense等中。
所以我想我可以通过MSBuild复制操作作为AfterBuild任务来处理这个问题(我在构建Web项目时构建了Dal实现设置,但没有引用)。我不想在MSBuild参数中硬编码路径或其他任何东西,所以我试图弄清楚如何从Web应用程序项目的MSBuild文件中引用Dal项目的输出。
所以基于上面提到的项目,这就是我想要发生的事情:
第3部分是我被困的地方。
我确信这可以做到,我只是找不到帮助的好参考。提前感谢您的帮助。
答案 0 :(得分:8)
我已经做了这个工作,虽然我很想找到一个更清洁的解决方案,它可以在MSBuild中获得内置参数的优势(比如$(TargetDir)等)但是要指向我想要获取输出的项目)。无论如何,这就是我所做的:
<Target Name="AfterBuild">
<Copy SourceFiles="$(SolutionDir)MyProject.Dal.Linq\bin\$(Configuration)\MyProject.Dal.Linq.dll" DestinationFolder="$(TargetDir)"/>
</Target>
我希望看到一个更清洁的解决方案,但现在应该这样做。
答案 1 :(得分: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>