仅当输出更改时,成功构建后将插件 dll 复制到文件夹
Copy plugin dlls to folder after successful build only when output is changed
我有动态加载的插件库,我想在开发过程中使用新版本将其推送到 运行 网络主机。为了避免复制时出现 "file in use" 错误,我在 csproj 中使用 msbuild 创建了 app_offline.htm
以回收网络应用程序。
<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>
您可以使您的目标递增,因此它仅在输入发生变化或预期输出缺失时构建:
<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。
我有动态加载的插件库,我想在开发过程中使用新版本将其推送到 运行 网络主机。为了避免复制时出现 "file in use" 错误,我在 csproj 中使用 msbuild 创建了 app_offline.htm
以回收网络应用程序。
<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>
您可以使您的目标递增,因此它仅在输入发生变化或预期输出缺失时构建:
<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。