252

在成功构建时,我希望将输出目录的内容复制到同一“基本”文件夹下的不同位置。此父文件夹是一个相对部分,可能会因源代码管理设置而异。

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

$(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”。但是,没有一个宏值列出父位置。

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

4

6 回答 6

326

这是您要放入项目的构建后事件命令行中的内容:

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

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

copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
于 2010-09-15T15:19:13.230 回答
207

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

IE。用于$(SolutionDir)\..\..获取您的基本目录。


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

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

于 2009-05-07T12:10:38.167 回答
43

你可以试试:

$(SolutionDir)..\..\
于 2009-05-07T12:09:36.750 回答
13

我认为这是相关的,但是在直接使用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>

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

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

相反,使用宏$(ProjectDir)..\,这相当于同一件事,工作正常,并在两个构建场景中保留了完整路径。

于 2013-12-30T19:51:07.420 回答
4

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

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

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

希望对日韩有帮助

于 2009-05-07T12:44:01.473 回答
0

我通过重新安装 VS 解决了我的问题,然后下载了 .Net Core(3.x 和 2.x)sdk 包

于 2021-08-19T13:24:39.663 回答