Visual Studio pre-build event check to see if a directory (and file) exists and delete it if it does

10,308

Solution 1

Apparently this works:

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

The above piece of code was one of the first ways I tried doing this. But it kept failing. After many more attempts I ended up restarting Visual Studio 2015 and entering that code again and then it started working.

Solution 2

I would use a target to accomplish this. Specifically, I would suggest overriding a BeforeBuild target. There are a couple different ways to do this, but the simplest is to modify your .vcxproj file IMHO.

At the bottom of your project file (you can edit it by right-clicking on your project in Visual Studio -> Unload Project, then right-click again and choose to edit that project) you should see an <Import ... line. Add a target after that line that's something like this:

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

See How to: Extend the Visual Studio Build Process for more information on overriding Before and After targets.

Share:
10,308
ashlar64
Author by

ashlar64

Updated on June 14, 2022

Comments

  • ashlar64
    ashlar64 almost 2 years

    Every time I do a build I would like for this Pre-build event to occur:

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

    This works fine if the directory is there. But if the directory is not there then it will cause the build to fail. I tried doing something like this to check if the directory was there:

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

    But I believe my syntax is wrong because I get a exit code of 255. What would be the proper way to get this to work?

    Thanks!