我已经在我的csproj文件中添加了一个目标部分。
<Target Name="Spa">
<Exec Command="ng --version" WorkingDirectory="../Spa" />
<Exec Command="ng build --prod" WorkingDirectory="../Spa" />
<Exec Command="del .\wwwroot\* /F /Q /S" />
<Exec Command="copy ..\Spa\dist\Spa\* .\wwwroot" />
</Target>
当我使用下面的命令执行它时,它正是它应该完成的。
dotnet msbuild /t:Spa
但是,如果可以在Visual Studio中执行发布之前调用目标,那就很好了( b + h + 标签 + 输入)。
我已阅读somewhere它可能,the docs声称 BeforePublish 是正确的目标名称。但是,当我将名称 Spa 更改为 BeforePublish 时,我没有获得构建和复制SPA的效果。
我缺少什么以及如何自动化流程?
答案 0 :(得分:1)
如何在发布时使用特定目标运行MsBuild?
我在这里发布了一个答案,以确保这个问题更清楚。
对于这个问题,要注意的第一件事是它与项目类型有关。如果您要发布WPF / Winodws Forms项目,publish
应该按预期工作。因为这些项目类型默认包含目标Publish
,所以目标&#34; BeforePublish&#34;将按预期工作。
但是,Web项目不包含此默认目标<Target Name="BeforePublish ">
,因此如果您在Web项目中使用BeforeTargets="BeforePublish"
,则不会按预期执行。 要解决此问题,我们可以向目标添加<Target Name="Spa" BeforeTargets="BeforePublish">
...
</Target>
,例如:
<PropertyGroup>
<BuildDependsOn>
BeforeBuild;
CoreBuild;
AfterBuild;
BeforePublish
</BuildDependsOn>
</PropertyGroup>
然后覆盖&#34;取决于&#34;属性:
AfterTargets="Build"
或您可以简单地将Spa
添加到目标<Target Name="Spa" AfterTargets="Build">
...
</Target>
,它应该很好:
BeforeBuild
第二件事需要注意的是,目标部分是否需要位于csproj文件的底部取决于样式csproj。正如Martin所说,如果您使用的是旧式csproj,那些目标AfterBuild
,Microsoft.Common.targets
实际上是在包含Visual Studio Build过程的Microsoft.Common.targets
文件中预定义的,所以我们必须在csproj的底部设置我们的自定义目标,以在{{1}}文件中覆盖它。如果您使用新风格的csproj(),那么设置它并不重要。
希望这有帮助。