2017-08-10 32 views
0

我已經動態加載了插件庫,我希望在開發過程中使用新版本來推送Web主機。爲避免複製中的「文件正在使用」錯誤,我在csproj中使用msbuild創建了app_offline.htm以回收Web應用程序。將插件dll複製到文件夾後,只有當輸出發生更改後才能成功構建

<ItemGroup> 
    <ModuleFiles Include="$(TargetDir)*.dll" /> 
</ItemGroup> 

<Target Name="PublishModule" AfterTargets="PostBuildEvent"> 
    <WriteLinesToFile File="$(SolutionDir)src\FooBar.Web.Mvc\app_offline.htm" /> 
    <Copy SourceFiles="@(ModuleFiles)" DestinationFolder="$(SolutionDir)src\FooBar.Web.Mvc\Modules\FooBar.Blog\" SkipUnchangedFiles="true" /> 
    <Delete Files="$(SolutionDir)src\FooBar.Web.Mvc\app_offline.htm" /> 
</Target> 

它正常工作,但我不知道它是否可以通過包裝PublishModule目標只有當輸出改變執行得到改善。所以,如果我構建的插件沒有改變,它不會不必要地回收Web主機。 SkipUnchangedFiles可防止任何未更改的DLL被複制,但app_offline仍被創建。

我需要這樣的東西,但它似乎沒有做任何事情。

<RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent> 

回答

2

你可以讓你的目標增量,因此只有當輸入改變建立或預期產出缺失:

<ItemGroup> 
    <ModuleFiles Include="$(TargetDir)*.dll" DestinationPath="$(SolutionDir)src\FooBar.Web.Mvc\Modules\FooBar.Blog\%(Filename)%(Extension)" /> 
</ItemGroup> 

<Target Name="PublishModule" AfterTargets="PostBuildEvent" Inputs="@(ModuleFiles)" Outputs="@(ModuleFiles->'%(DestinationPath)')"> 
    <WriteLinesToFile File="$(SolutionDir)src\FooBar.Web.Mvc\app_offline.htm" /> 
    <Copy SourceFiles="@(ModuleFiles)" DestinationFiles="@(ModuleFiles->'%(DestinationPath)')"/> 
    <Delete Files="$(SolutionDir)src\FooBar.Web.Mvc\app_offline.htm" /> 
</Target> 

詳見How to: Build Incrementally增量構建。

+0

正是我需要的,謝謝! – Xeevis

相關問題