VS2017 .Net Core(完整框架)项目的后期构建事件获取 $(配置名称) 的空字符串



我正在为一个新项目设置开发环境。 它是一个 Web API 项目,从静态文件为@angular项目提供服务。 为了方便这一点,在后期构建中,我运行了角度 cli 的构建函数,然后将文件复制到 wwwroot 中。这一切都很好。

但是,我希望能够运行两个不同的 npm 脚本,具体取决于项目是处于调试模式还是发布模式。 在我的构建后脚本中,我尝试了这个:

if "$(ConfigurationName)" == "Debug"
(
   npm run build
)
else if "$(ConfigurationName)"=="Release"
(
   npm run prod
)

但我得到了

The command "if "" == "Debug"
(
   npm run build
)
else if ""=="Release"
(
   npm run prod
)" exited with code 255.    

看起来没有为配置名称提供任何值。 我已经尝试了调试和发布模式,但得到了同样的错误。 配置名称变量在VS 2017中是否发生了变化?

编辑

:但是,如果我单击"编辑后期生成",然后单击"宏",我可以在此处看到ConfigurationName具有值。 只是我的脚本看不到

  1. $(Configuration)可能适用于您的情况,因为它在构建过程中足够早地被赋予了一个值。

  2. 构建前和构建后事件不适用于"基于 SDK"的项目(无需修改(,因为在评估构建事件属性时未定义大多数属性。有关更多详细信息,请参阅 https://github.com/dotnet/project-system/issues/1569。

我建议在您的项目中执行以下操作:

<Project Sdk="...">
  <!-- other content -->
  <Target Name="RunNpmBuild" BeforeTargets="BeforeBuild" Condition="'$(Configuration)' != 'Release'">
    <Exec Command="npm run build" />
  </Target>
  <Target Name="RunNpmProd" BeforeTargets="BeforeBuild" Condition="'$(Configuration)' == 'Release'">
    <Exec Command="npm run prod" />
  </Target>
</Project>

请注意,在 1.0.* CLI 中,构建期间生成的以前不存在的文件可能不会发布 - 有关解决方法,请参阅 https://github.com/aspnet/websdk/issues/114。

最新更新