VS2017 .Net Core(完整框架)项目的 Post 构建事件获取 $(ConfigurationName) 的空字符串

VS2017 .Net Core (Full Framework) Project's Post Build Event gets empty string for $(ConfigurationName)

我正在为一个新项目设置开发环境。这是一个 Web API 项目,服务于来自静态文件的 @angular 项目。为了方便这一点,在 post 构建时,我 运行 angular cli 的构建功能,然后将文件复制到 wwwroot。这一切都很好。

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

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.    

似乎没有为 ConfigurationName 提供任何值。我已经尝试了调试和发布模式并得到了同样的错误。 ConfigurationName 变量是否在 VS 2017 中发生了变化?

编辑:但是,如果我单击编辑 Post-build,然后单击宏,我可以看到 here ConfigurationName 有一个值。它只是没有被我的脚本看到

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

  2. Pre & Post 构建事件并不真正适用于 "SDK-based" 项目(未经修改),因为当构建事件属性是评估。有关详细信息,请参阅 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 了解解决方法。