Graeme Yeo
Graeme Yeo

Reputation:

Dynamically add files to visual studio deployment project

I've been desperately looking for the answer to this and I feel I'm missing something obvious.

I need to copy a folder full of data files into the TARGETDIR of my deployment project at compile time. I can see how I would add individual files (ie. right click in File System and go to Add->File) but I have a folder full of data files which constantly get added to. I'd prefer not to have to add the new files each time I compile.

I have tried using a PreBuildEvent to copy the files:

copy $(ProjectDir)..\Data*.* $(TargetDir)Data\

which fails with error code 1 when I build. I can't help but feel I'm missing the point here though. Any suggestions?

Thanks in advance.

Graeme

Upvotes: 4

Views: 4575

Answers (5)

michaelalm
michaelalm

Reputation: 210

Went to this route.

  • Created a new project (deleted the default source file Class1)
  • Added the files/folders necessary to the project.
  • Added the project as project output in the installer, choosing the option content files.

This removes the complexity of having to zip/unzip the files as suggested earlier.

Upvotes: 2

Mike Beckerleg
Mike Beckerleg

Reputation: 158

I found a different workaround for this. I added a web project to my solution that points at the data directory I want included in the deployment project. The web project automatically picks up any new files in the data directory and you can refer to the project content in the deployment project.

Upvotes: 0

nportelli
nportelli

Reputation: 3916

Your error is probably because your path has spaces in it and you don't have the paths in quotes.

ex copy "$(ProjectDir)..\Data*.*" "$(TargetDir)Data\"

I need to do a similar thing. Thinking a custom action...

Upvotes: 0

achirlin
achirlin

Reputation: 44

I solved the problem by a workaround:

  • Add a build action of packaging entire directory (could be filtered) to a ZIP file.
  • Add a reference to an empty ZIP file to deployment project.
  • Add a custom action to deployment project to extract the ZIP to destination folder.

It's simple and stable.

Upvotes: 0

Faeldihn
Faeldihn

Reputation:

Try

xcopy $(ProjectDir)..\Data\*.* $(TargetDir)Data /e /c /i [/f] [/r] /y

/e to ensure tree structure fulfilment (use /s if you want to bypass empty folders)
/c to continue on error (let the build process finish)
/i necessary to create the destination folder if none exists
/y assume "yes" for overwrite in case of previously existing files

[optionnal]
/f if you wanna see the whole pathes resulting from the copy
/r if you want to overwrite even previously copied read-only files

The method is simpler on the project than on files, yes. Beside, on files, it copies only the modified/missing files on each build but forces you to maintain the project on each data pack modification. Depends on the whole data size and the variability of your data pack.

Also beware the remaining files if you remove some from your data pack and rebuild without emptying your target folder.

Good luck.

Upvotes: 0

Related Questions