Visual Studio $(ProjectDir)是空字符串

Vas*_*hev 1 .net c# msbuild post-build-event visual-studio

我正在使用Visual Studio 2017,我想添加一个post-build命令.当我进入'宏'窗口时,我看到正确的路径核心为$(ProjectDir)变量.所以我添加了命令:

$(ProjectDir)ClientApp \npm运行构建

但是当我执行构建时,我收到以下错误:

命令'ClientApp \npm run build'与代码3一起使用.

我将MSBuild verbose更改为Diagnose,并在Output窗口中看到:

1>在文件"C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets"中定位"PostBuildEvent":1>从汇编中使用"Exec"任务"Microsoft.Build.Tasks.Core,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a".1>任务"执行"1>任务参数:WorkingDirectory = bin\Debug \netcoreapp1.1\1>任务参数:Command = ClientApp \npm run build 1> ClientApp \npm run build 1>系统找不到指定的路径.1>
C:\ Program Files(x86)\ Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(4933,5):错误MSB3073:命令"ClientApp \npm run build"退出代码3. 1>完成执行任务"Exec" - FAILED.

在目标文件中,我得到了这些行:

  <Target
      Name="PostBuildEvent"
      Condition="'$(PostBuildEvent)' != '' and ('$(RunPostBuildEvent)' != 'OnOutputUpdated' or '$(_AssemblyTimestampBeforeCompile)' != '$(_AssemblyTimestampAfterCompile)')"
      DependsOnTargets="$(PostBuildEventDependsOn)">

    <Exec WorkingDirectory="$(OutDir)" Command="$(PostBuildEvent)" />

  </Target>
Run Code Online (Sandbox Code Playgroud)

我可以将工作目录从$(OutDir)更改为$(ProjectDir)以及如何?

我错的任何想法?注意 - 我在BAT文件中添加了命令,只是为了测试但结果是一样的

小智 9

请尝试$(MSBuildProjectDirectory)

  • 问题是为什么$(ProjectDir)是空的? (7认同)

Boh*_*dan 5

该问题也可能影响其他 VS 变量。此处描述了通用解决方案。