Visual Studio后构建事件-复制到相对目录位置

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

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

$(SolutionDir) = D: \ GlobalDir \ \浏览器名称版本\Solution1\build

$(ProjectDir) = D: \ GlobalDir \ \浏览器名称版本\Solution1\Version\ProjectA\

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

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

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

我如何提取只有的基础位置后构建复制命令?

411353 次浏览

你可以试试:

$(SolutionDir)..\..\

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

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


所有宏的列表,见这里:

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

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

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

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

希望这对你有帮助 Rihan < / p >

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

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

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

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

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

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

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

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

我解决了我的问题,重新安装VS,然后下载。net Core(3。X和2.x) SDK包

这是我的后构建脚本

  1. 创建我自己的自定义路径。包括库和版本。
  2. 复制.dll(目标文件)
  3. 复制*。md文件。

脚本:

md c:\_References\$(ProjectName)\$(AssemblyVersion)
xcopy $(ProjectDir)$(OutDir)$(TargetFileName) c:\_References\$(ProjectName)\$(AssemblyVersion) /y
xcopy $(ProjectDir)*.md c:\_References\$(ProjectName)\$(AssemblyVersion) /y