【问题标题】:MSBuild - Post-Build capture binaries regardless of build configuration or framework?MSBuild - 无论构建配置或框架如何,构建后捕获二进制文件?
【发布时间】:2017-11-22 19:31:27
【问题描述】:

项目 A(一个网络应用程序)依赖于项目 B(一个 exe) - 我需要使用项目 A 的构建后事件将 exe 从项目 A 的 bin 复制到项目 A 的 wwwroot。

我想在不知道构建配置或目标框架的情况下从它被丢弃的任何地方(bin/debug 或 bin/release 或 bin/debug/netcoreapp2.0 等)复制二进制文件。现在我正在这样做:

copy /Y $(ProjectDir)bin\debug\netcoreapp2.0\app.exe $(ProjectDir)wwwroot\exe\app.exe

这在本地工作得很好,但是当它使用 Release 配置在其他地方构建时,它会失败。我可以使用一些 if/then 检查,但我宁愿有一个宏来替换路径的 $(ProjectDir)bin\debug\netcoreapp2.0 块,所以我总是在不了解配置/框架的情况下获取我需要的东西。

我尝试使用$(OutDir)$(TargetDir),但没有成功 - 这些只是给了我非bin 路径。

我应该使用哪个宏?

【问题讨论】:

  • 作为一个选项,您可以将 OutDir 属性设置为所需位置并完全跳过构建后步骤,例如。 G。 <OutDir>..\wwwroot\exe\</OutDir> 在不以任何东西为条件的 PropertyGroup 中。

标签: .net visual-studio msbuild post-build-event


【解决方案1】:

$(TargetPath) 应该是输出可执行文件的完整路径。不确定您对 $(TargetDir) 给您提供“非 bin”路径是什么意思。 顺便说一句,这不是一个真正的 C# 问题。

【讨论】:

  • 我将上面的内容替换为copy /Y $(TargetPath)app.exe $(ProjectDir)wwwroot\exe\app.exe 并得到Could not find file 'C:\Users\me\source\repos\App\wwwroot\exe\app.exe - 知道为什么吗?我正在尝试从删除二进制文件的地方复制
  • 您不需要“app.exe”——它包含在$(TargetPath) 中。但您可能需要确保$(ProjectDir)wwwroot\exe 处的文件夹与mkdir -p 存在
  • 我需要指定EXE。项目 A(一个 Web 应用程序)依赖于项目 B(一个 exe)——我需要使用项目 A 的构建后事件将 exe 从项目 A 的 bin 复制到项目 A 的 wwwroot
  • 如果项目 B 在不同的目录中,那么项目 A 的任何宏都不会告诉你它在哪里。为什么不能在项目 B 的构建后规则中执行此操作?
  • 由于 A 依赖于 B,因此 b 的 exe (app.exe) 被丢弃在 A 的 bin 中。真的,我只需要一个宏来替换上面的$(ProjectDir)bin\debug\netcoreapp2.0。这不存在吗?我可以在项目 B 中进行后期构建,但我不得不担心找到 A 的 wwwroot(面临同样的问题 - 如何在不知道配置/框架的情况下找到 bin)。
猜你喜欢
  • 2013-07-16
  • 2012-09-05
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 2011-08-05
相关资源
最近更新 更多