2008-11-05 55 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> 
相關問題