Frage

I want to use local variable inside the PostBuild event, but I could not understand how to use it inside. Here my Post-Build event commands (param is the named parameter that can be passed through the msbuild /p switch):

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

When building the solution I get:

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.

If I change %fold% to $(fold), I get another result, but it is also wrong:

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.

What I'm doing wrong?

War es hilfreich?

Lösung

Firstly, use the AfterBuild msbuild target rather than PostBuild event. This will give msbuild more information about what you're trying to do and done correctly should mean a faster incremental compile.

Environment variables can be used in AfterBuild events: http://msdn.microsoft.com/en-us/library/ms171459.aspx

Ideally once you've run msbuild once, when you run it a second time it should do no work skipping compiles and not bothering to copy things around as the files are already there.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top