【问题标题】:Visual Studio pre-build event check to see if a directory (and file) exists and delete it if it doesVisual Studio 预构建事件检查以查看目录(和文件)是否存在,如果存在则将其删除
【发布时间】:2016-02-01 17:10:32
【问题描述】:

每次我进行构建时,我都希望这个 Pre-build 事件发生:

del  $(ProjectDir)\obj\Debug\Package\PackageTmp\web.config

如果目录在那里,这可以正常工作。但是如果该目录不存在,那么它将导致构建失败。我尝试做这样的事情来检查目录是否存在:

if Exists('$(ProjectDir)\obj\Debug\Package\PackageTmp\')   
del  $(ProjectDir)\obj\Debug\Package\PackageTmp\web.config

但我认为我的语法是错误的,因为我得到了 255 的退出代码。让它工作的正确方法是什么?

谢谢!

【问题讨论】:

  • 它不是带括号的函数,它的名字是存在的。使用双引号。如果存在 "路径" del "路径"
  • 您是在谈论实际的 xml 文件本身吗?还是VS中属性页面的编辑器窗口?我已经尝试了十几种方法,但没有成功。
  • 另一种方式:忽略退出代码,例如stackoverflow.com/questions/7912726/…

标签: msbuild visual-studio-2015 prebuild


【解决方案1】:

显然这是可行的:

if EXIST "$(ProjectDir)\obj\Debug\Package\PackageTmp\web.config" (
del  "$(ProjectDir)\obj\Debug\Package\PackageTmp\web.config"
)

上面的代码是我尝试这样做的第一种方法。但它一直失败。经过多次尝试,我最终重新启动了 Visual Studio 2015 并再次输入该代码,然后它开始工作。

【讨论】:

    【解决方案2】:

    我会使用一个目标来实现这一点。具体来说,我建议覆盖BeforeBuild 目标。有几种不同的方法可以做到这一点,但最简单的方法是修改您的 .vcxproj 文件恕我直言。

    在您的项目文件底部(您可以通过在 Visual Studio 中右键单击您的项目 -> 卸载项目来编辑它,然后再次右键单击并选择编辑该项目)您应该会看到一个 <Import ... 行.在该行之后添加一个目标,如下所示:

    <Target Name="BeforeBuild" Condition="Exists('$(ProjectDir)\obj\Debug\Package\PackageTmp\web.config')">
      <Delete Files="$(ProjectDir)\obj\Debug\Package\PackageTmp\web.config" />
    </Target>
    

    有关覆盖 Before 和 After 目标的更多信息,请参阅 How to: Extend the Visual Studio Build Process。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      • 2017-10-01
      • 1970-01-01
      相关资源
      最近更新 更多