我已经动态加载了插件库,我想在开发过程中将它们推送到正在运行的具有新版本的 Web 主机。为了避免复制时出现“文件正在使用”错误,我app_offline.htm
在 csproj 中使用 msbuild 创建以回收 Web 应用程序。
<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
目标包装为仅在输出更改时执行来改进它。因此,如果我构建没有更改的插件,它不会不必要地回收网络主机。SkipUnchangedFiles
防止任何未更改的 DLL 被复制,但app_offline
仍会被创建。
我需要这样的东西,但它似乎没有做任何事情。
<RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>