Visual Studio Post Build事件 - 复制到相对目录位置

Pre*_*ets 219 post-build-event visual-studio-2008 visual-studio

在成功构建时,我希望将输出目录的内容复制到同一"base"文件夹下的其他位置.此父文件夹是相对部分,可以根据"源代码管理"设置而有所不同.

我列出了一些可供我使用的宏值...

$(SolutionDir)= D:\ GlobalDir\Version\AppName\Solution1\build

$(ProjectDir)= D:\ GlobalDir\Version\AppName\Solution1\Version\ProjectA \

我想将Output Dir内容复制到以下文件夹:

D:\ GlobalDir\Version\AppName\Solution2\Project\Dependency

需要从上述宏之一获取基本位置"D:\ GlobalDir\Version\AppName".但是,没有宏值列出父位置.

如何提取构建后复制命令的基本位置?

Luc*_*s B 272

以下是您要在项目的Post-build事件命令行中添加的内容:

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"
Run Code Online (Sandbox Code Playgroud)

编辑:或者如果您的目标名称与项目名称不同.

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
Run Code Online (Sandbox Code Playgroud)

  • 可以使用带有通配符的`xcopy`和相应的开关来实现类似的结果,同时保持源文件夹的(树)结构,例如:`xcopy/i/e/s/y/f"<source>\MyFolder\*""<destination>\MyFolder"` (8认同)
  • 我建议在source-part中使用$(TargetName)而不是$(ProjectName). (4认同)
  • +1 表示引号(如果路径有空格),/Y 表示强制覆盖。 (3认同)
  • 它不适合我,因为我忘记了`/ Y`.感谢您展示整个命令. (2认同)
  • 更新到我的上一页。评论:`copy / Y“ $(TargetPath)”“ $(SolutionDir)somewhere \”`,不带多余的反斜杠,因为$(SolutionDir)包含尾随反斜杠(至少在VS2012中) (2认同)

gbj*_*anb 181

如果TargetDir或其他宏都没有指向正确的位置,请使用".."目录向后向上移动文件夹层次结构.

即.使用$(SolutionDir)\..\..让您的基本目录.


有关所有宏的列表,请参见此处:

http://msdn.microsoft.com/en-us/library/c02as0cs.aspx


ich*_*ban 40

你可以尝试:

$(SolutionDir)..\..\
Run Code Online (Sandbox Code Playgroud)

  • 请记住,变量$(SolutionDir)已经有反斜杠.来源:"解决方案的目录(用驱动器和路径定义);包括尾部反斜杠'\'." https://msdn.microsoft.com/en-us/library/42x5kfw4.aspx (7认同)

drz*_*aus 10

我认为这是相关的,但是在使用msbuild命令行(从批处理文件)直接构建VS与VS内部构建时,我遇到了问题.

使用类似以下内容:

<PostBuildEvent>
  MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
  start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>
Run Code Online (Sandbox Code Playgroud)

(注意:start XCOPY而不是XCOPY用于解决阻止复制的权限问题)

从批处理文件执行msbuild时,宏$(SolutionDir)评估为..\,导致XCOPY命令失败.从Visual Studio内部构建时,它工作正常.确认使用/verbosity:diagnostic以查看评估的输出.

使用宏$(ProjectDir)..\代替相同的东西,工作正常,并在两个构建方案中保留完整路径.