Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio Visual Studio生成后事件-复制到相对目录位置_Visual Studio_Visual Studio 2008_Post Build Event - Fatal编程技术网

Visual studio Visual Studio生成后事件-复制到相对目录位置

Visual studio Visual Studio生成后事件-复制到相对目录位置,visual-studio,visual-studio-2008,post-build-event,Visual Studio,Visual Studio 2008,Post Build Event,成功构建后,我希望将输出目录的内容复制到同一“base”文件夹下的不同位置。此父文件夹是一个相对部分,可以根据源代码管理设置而有所不同 我已经列出了一些可用的宏值 $(SolutionDir)=D:\GlobalDir\Version\AppName\Solution1\build $(ProjectDir)=D:\GlobalDir\Version\AppName\Solution1\Version\ProjectA\ 我想将输出目录内容复制到以下文件夹: D:\GlobalDir\Versi

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

我已经列出了一些可用的宏值

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

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

我想将输出目录内容复制到以下文件夹:

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

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

如何仅提取生成后复制命令的基本位置?

您可以尝试:

$(SolutionDir)..\..\

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

也就是说,使用
$(SolutionDir)\..\\
获取基本目录


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


直接使用msbuild没有意义吗?如果对每个生成都执行此操作,则可以在末尾添加msbuild任务?如果只想查看是否找不到Visual Studio IDE上未显示的另一个宏值,可以将msbuild选项切换到diagnostic,该选项将显示可以使用的所有变量及其当前值

若要在visual studio中启用此功能,请转到“工具/选项”,然后向下滚动树状视图到名为“项目和解决方案”的部分,展开该部分,然后单击“生成并运行”,右侧是一个下拉列表,指定生成输出详细程度,将其设置为“诊断”,将显示可以使用的其他宏值

因为我不太清楚您希望达到什么级别,以及您希望构建有多复杂,这可能会给您一些想法。我最近一直在编写构建脚本,甚至在构建过程中执行SQL代码。如果您希望获得更多帮助,甚至需要一些示例生成脚本,请告诉我,但是如果您只是希望在生成结束时运行一个小进程,那么使用完整的msbuild脚本可能有点过分

希望能有帮助
Rihan

以下是您希望在项目的构建后事件命令行中输入的内容:

copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"
编辑:或者如果目标名称与项目名称不同

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"

我认为这是相关的,但是当直接使用
msbuild
命令行(从批处理文件)构建与从内部构建vs

使用类似以下内容:

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

移动/Y“$(TargetDir)something.file1”“$(ProjectDir)something.file1”
启动XCOPY/Y/R“$(SolutionDir)SomeConsoleApp\bin\$(配置名称)\*”$(ProjectDir)应用程序\u数据\Consoles\SomeConsoleApp\”
(注意:
start XCOPY
而不是
XCOPY
用于绕过阻止复制的权限问题)

从批处理文件执行msbuild时,宏
$(SolutionDir)
的计算结果为
。\
,这导致
XCOPY
命令失败。在VisualStudio中构建时,它运行良好。使用
/verbosity:diagnostic
查看评估的输出进行确认


相反,使用宏
$(ProjectDir)\
,这相当于一件事,在两种构建场景中运行良好并保留了完整路径。

thx Rihan,但显然VS 2003似乎不支持这一点!当然,我对后期构建事件非常满意;-)我没有意识到它是vs2003,因此使用msbuild作为可能的解决方案,如果我记得vs2003是在msbuild时代之前的话?谢谢你的回复。祝VS 2003好运,在转到VS2005Good tip之后,我没有回头看。我忘了引号。它对我不起作用,因为我忘了
/Y
。感谢您展示整个命令。您可以使用带有通配符和适当开关的
xcopy
来实现类似的结果,同时保持源文件夹的(树)结构,例如:
xcopy/i/e/s/y/f“\MyFolder\*”\MyFolder”
我建议使用$(TargetName)而不是$(ProjectName)在source-part.update中,更新到我的上一个版本。注释:
copy/Y“$(TargetPath)”“$(SolutionDir)某处\“
,没有额外的反斜杠,因为$(SolutionDir)包含一个尾随反斜杠(至少在VS2012中)交叉链接到,以防我忘了给学分…
Start
对我有效(对于共享文件夹中的
xcopy
)。请记住,变量$(SolutionDir)已经有反斜杠。Source:“解决方案的目录(用驱动器和路径定义);包括后面的反斜杠“\”。谢谢!!提示得好