Visual Studio发布构build事件 – 复制到相对目录位置

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

我列出了一些可用于我的macros值…

$(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”需要从上面的macros中获取。 但是,没有一个macros值列出父级位置。

我如何提取后构build复制命令的基地址?

如果没有TargetDir或其他macros指向正确的位置,请使用“..”目录向后翻转文件夹层次结构。

即。 使用$(SolutionDir)\..\..来获取您的基础目录。


有关所有macros的列表,请参阅此处:

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

这是你想要在项目的后生成事件命令行中的内容:

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

编辑:或者如果您的目标名称是不同于项目名称。

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

你可以尝试:

 $(SolutionDir)\..\..\ 

我认为这是相关的,但直接使用msbuild命令行(从一个batch file)vs从VS内build设时,我有一个问题。

使用以下内容:

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

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

从batch file执行msbuild时,macros$(SolutionDir)评估为..\ ,导致XCOPY命令失败。 在Visual Studio中构build它时,它可以很好地工作。 确认使用/verbosity:diagnostic来查看评估输出。

使用macros$(ProjectDir)..\代替相同的东西,工作正常,并保留两个构buildscheme的完整path。

直接使用msbuild是没有意义的吗? 如果你正在做每一个构build,那么你可以在最后添加一个msbuild任务? 如果您只想查看是否找不到在Visual Studio IDE上未显示的另一个macros值,则可以将msbuild选项切换到诊断,并将显示您可以使用的所有variables,如以及他们现在的价值。

要在Visual Studio中打开它,请转到工具/选项,然后向下滚动树形视图到项目和解决scheme部分,展开它,然后单击构build并运行,在右侧它们是一个下拉列表,指定构build输出的详细程度,将其设置为诊断,将显示您可以使用的其他macros值。

因为我不太清楚你想要达到什么样的水平,以及你希望自己的构build有多复杂,这可能会给你一些想法。 我最近一直在做构build脚本,甚至执行SQL代码作为构build的一部分。 如果你需要更多的帮助,甚至是一些示例生成脚本,请告诉我,但是如果这只是一个小的过程,你想在构build结束时运行,那么可能是完整的msbuild脚本有点过分杀死。

希望对Rihan有帮助