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

时间:2017-05-17 12:29:26

标签: .net msbuild .net-core visual-studio-2017 post-build-event

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

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

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中是否发生了变化?

编辑:但是,如果我单击编辑后构建然后单击宏,我可以看到here ConfigurationName具有值。它只是我的脚本

没有看到

1 个答案:

答案 0 :(得分:4)

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

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

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

    <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了解解决方法。