Tooling: PrepareForPublish 之前的客户端资产生成未发布

创建于 2017-03-13  ·  3评论  ·  资料来源: aspnet/Tooling

我一开始在 SO 上发布了这个,但没有任何回应。 在这里重新发布,希望有人可以对正在发生的事情有所了解。


我有一个gulp publish任务,它在发布过程中为生产服务器准备资产。 在project.json这工作成功:

"scripts": {
    "prepublish": [ "npm install", "gulp publish" ],
    "postpublish": [
      "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%",
      "dotnet razor-precompile --configuration %publish:Configuration% --framework %publish:TargetFramework% --output-path %publish:OutputPath% %publish:ProjectPath%"
    ]
  }

通过 VS2017 迁移到带有csproj MSBuild 给出了我期望的等价物:

  <Target Name="PrepublishScript" BeforeTargets="PrepareForPublish">
    <Exec Command="npm install" />
    <Exec Command="gulp publish" />
  </Target>

在执行npm installgulp publish命令的同时,它们似乎运行得太晚了,无法将它们生成的资产包含在实际发布过程中。

如果我刚刚克隆存储库并连续发布两次,则第二次成功,因为资产是从第一次发布中生成的,因此包含在第二次发布中。

我的第一个想法是通过设置BeforeTargets="Build"在发布过程中更早地跳转,但这不仅不起作用,而且即使我们在每个构建中运行这些命令,甚至在开发过程中也是如此。 就好像发布过程在开始时拍摄文件系统的快照,并且在发布过程中的任何地方都不检查添加到文件系统的文件。 对于这个项目,我们需要能够从新克隆的存储库构建,因为这就是构建服务器上发生的事情( git clone -> dotnet restore -> dotnet publish -c Release -o PublishOutput )。

有效的是设置BeforeTargets="Restore" 。 这会在构建服务器上完美生成所有内容,大概是因为gulp publish生成的资产在dotnet publish命令之前存在于文件系统中。 当然,我们不想在每个dotnet restore实际生成资产!

有没有办法挂钩早于“PrepareForPublish”的目标,或者是否有人甚至有您可以锁定的 MSBuild 目标列表?

最有用的评论

@svallis这是由https://github.com/dotnet/cli/issues/5498https://github.com/aspnet/websdk/issues/114跟踪的提供开箱即用的更好解决方案之前,我正在使用一种解决方法(

所有3条评论

@svallis这是由https://github.com/dotnet/cli/issues/5498https://github.com/aspnet/websdk/issues/114跟踪的提供开箱即用的更好解决方案之前,我正在使用一种解决方法(

非常感谢@nil4 - 进行了搜索,但正在我没有检查的回购中跟踪问题,感谢

在这里关闭它,因为它在其他地方被跟踪

此页面是否有帮助?
0 / 5 - 0 等级