Visual Studio构建后事件宏为空

Nat*_*ngs 12 visual-studio-2013 visual-studio-2015

在Visual Studio 2013(或2015)中,我有一个特定的项目,在后期构建事件中,我正在尝试将$(TargetDir)传递给批处理文件.

问题是,除了从"解决方案"开始的宏之外,所有宏都是空的.此外,所有宏都在"编辑生成后事件命令行"对话框中正确显示.

echo ConfigurationName is "$(ConfigurationName)"
Run Code Online (Sandbox Code Playgroud)

结果是

Configuration name is ""
Run Code Online (Sandbox Code Playgroud)

Man*_*uel 19

我有同样的问题.根据https://social.msdn.microsoft.com/Forums/vstudio/en-US/179716e8-89eb-40ff-ba13-339e2d25d1c8/outdir-and-targetpath-macros-are-empty?forum=msbuild,你有删除csproj文件中的ProperyGroupd,然后再次在visual studio中添加构建事件. 在此输入图像描述

再次添加后,它将位于csproj文件的末尾,并且宏应该可以正常工作.

  • 我在 2017 年花了很多时间使用 msbuild 来解决这个问题。这里的关键点应该是 .NET SDK 存在一个 [bug?](https://github.com/dotnet/project-system/issues/1569)这要求 csproj 文件中的“<Import>”和“<Target>”元素后面有“<PostBuildEvent>”。 (2认同)

wkn*_*auf 5

将项目文件从旧的 .NET Framework 格式迁移到 SDK 样式时遇到同样的问题。

看来 PostBuildEvent 的结构发生了变化,并且没有被“升级助手”工具转换。

这是之前的命令:

<PropertyGroup>
  <PostBuildEvent>echo ProjectDir: $(ProjectDir)</PostBuildEvent>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

这是新版本:

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
  <Exec Command="echo ProjectDir: $(ProjectDir)" />
</Target>
Run Code Online (Sandbox Code Playgroud)

要进行迁移:打开代码文件(右键单击项目,“属性”)。然后剪切构建后片段并保存文件。再次粘贴该代码片段 - 现在它应该具有新的格式。