如何在构建后事件中使用用户定义的变量?

stu*_*bax 7 c# msbuild variables post-build-event

我想在PostBuild事件中使用局部变量,但我无法理解如何在里面使用它.这里是我的Post-Build事件命令(param是可以通过msbuild/p开关传递的命名参数):

set fold=$(TargetDir)
if defined param (set fold=$(TargetDir)$(param)\)
if not exist "%fold%" md "%fold%"
copy /y "$(TargetPath)" "%fold%"
Run Code Online (Sandbox Code Playgroud)

在构建解决方案时,我得到:

msbuild PrePostBuildEvents.sln /p:param=ext

...

PostBuildEvent:
  set fold=G:\prj\work\PrePostBuildEvents\bin\Debug\
  if defined param (set fold=G:\prj\work\PrePostBuildEvents\bin\Debug\ext\)
  if not exist "%fold%" md "%fold%"
  copy /y "G:\prj\work\PrePostBuildEvents\bin\Debug\PrePostBuildEvents.dll" "%fold%"
  The file cannot be copied onto itself.
          0 file(s) copied.
Run Code Online (Sandbox Code Playgroud)

如果我%fold%改为$(fold),我会得到另一个结果,但这也是错误的:

PostBuildEvent:
  set fold=G:\prj\work\PrePostBuildEvents\bin\Debug\
  if defined param (set fold=G:\prj\work\PrePostBuildEvents\bin\Debug\ext\)
  if not exist "" md ""
  copy /y "G:\prj\work\PrePostBuildEvents\bin\Debug\PrePostBuildEvents.dll" ""
  The filename, directory name, or volume label syntax is incorrect.
          0 file(s) copied.
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

Squ*_*rel 1

首先,使用 AfterBuild msbuild 目标而不是 PostBuild 事件。这将为 msbuild 提供有关您正在尝试执行的操作的更多信息,并且正确完成应该意味着更快的增量编译。

环境变量可以在 AfterBuild 事件中使用: http://msdn.microsoft.com/en-us/library/ms171459.aspx

理想情况下,一旦您运行了一次 msbuild,当您第二次运行它时,它应该不会执行跳过编译的工作,并且不会费心复制内容,因为文件已经存在。