我想在PostBuild event中使用局部变量,但我不知道如何在内部使用它。下面是我的构建后事件命令(param是可以通过msbuild /p开关传递的命名参数):
set fold=$(TargetDir)
if defined param (set fold=$(TargetDir)$(param)\)
if not exist "%fold%" md "%fold%"
copy /y "$(TargetPath)" "%fold%"在构建解决方案时,我得到了:
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.如果我将%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.我哪里做错了?
发布于 2014-02-20 21:08:02
首先,使用AfterBuild msbuild目标而不是PostBuild事件。这将为msbuild提供更多关于您正在尝试做什么的信息,并且正确地完成应该意味着更快的增量编译。
可以在AfterBuild事件中使用环境变量:http://msdn.microsoft.com/en-us/library/ms171459.aspx
理想情况下,一旦你运行了msbuild一次,当你第二次运行它时,它应该不会做任何工作,跳过编译,也不会因为文件已经存在而费心复制东西。
https://stackoverflow.com/questions/21219926
复制相似问题