在一次成功的构建中,我希望将输出目录的内容复制到同一“base”文件夹下的不同位置。这个父文件夹是一个相对的部分,可以根据源代码控制设置而变化。

我列出了一些对我有用的宏值…

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

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

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

D: \ GlobalDir \ \版本浏览器名称\ \ Solution2 \项目依赖

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

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


当前回答

我认为这是相关的,但我有一个问题,当直接使用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>

(注意:启动XCOPY而不是XCOPY用来绕过阻止复制的权限问题)

宏$(SolutionDir)计算为..\当从批处理文件执行msbuild时,导致XCOPY命令失败。在Visual Studio中构建时,它工作得很好。Confirmed using /verbosity:诊断性地查看评估的输出。

使用宏$(ProjectDir)..\相反,这相当于同样的事情,工作得很好,并在两个构建场景中保留了完整的路径。

其他回答

下面是你想在项目的Post-build事件命令行中添加的内容:

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

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

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

如果没有一个TargetDir或其他宏指向正确的位置,则使用".."目录来向后进入文件夹层次结构。

ie。使用$ (SolutionDir) \ \…获取基本目录。


所有宏的列表,见这里:

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

我认为这是相关的,但我有一个问题,当直接使用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>

(注意:启动XCOPY而不是XCOPY用来绕过阻止复制的权限问题)

宏$(SolutionDir)计算为..\当从批处理文件执行msbuild时,导致XCOPY命令失败。在Visual Studio中构建时,它工作得很好。Confirmed using /verbosity:诊断性地查看评估的输出。

使用宏$(ProjectDir)..\相反,这相当于同样的事情,工作得很好,并在两个构建场景中保留了完整的路径。

直接使用msbuild没有意义吗?如果你在每次构建时都这样做,那么你可以在最后添加msbuild任务?如果你只是想看看是否找不到Visual Studio IDE上没有显示的另一个宏值,你可以将msbuild选项切换到诊断,这将显示你可以使用的所有变量,以及它们的当前值。

要在visual studio中打开它,请转到工具/选项,然后向下滚动树视图到称为项目和解决方案的部分,展开并单击构建并运行,在右侧是一个指定构建输出详细信息的下拉菜单,将其设置为诊断,将显示您可以使用的其他宏值。

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

希望能有所帮助 Rihan

你可以试试:

$(SolutionDir)..\..\