Synchronize folders using MSBUILD - msbuild

How can I use MSBuildExtensionPack 's Sync task to replace all files that exist in folder A with copies in folder B? (but skip any files that only exist in B?)

Do you have to use extension pack? If that is not a requirement, you can just do it using xcopy:
<Exec Command="xcopy /yu $(SourceFolder) $(DestinationFolder)" />
Make sure $(DestinationFolder) already exists before executing this, otherwise xcopy will be displaying a prompt to create one, which is not useful for the automated build system.

The solution is simple
Use "Exclude" and "!Exists" when defining the list of files to be copied

Related

how to rename folder and its all sub folder using ssis

In file System task there is no option to rename a folder.The option is to rename file.
I do understand we can achieve renaming of multiple fils using a for each loop and file system task.
Is there any wayto rename a folder and all it's sub folder using any of the tasks in ssis
File System Task is the tool you want. A Move Directory is the same as a Rename.
Configure it as such. I prefer variables as it makes my packages cleaner
You could of course get the same results by running an Execute Task command and using the rename command
Renames a file or files.
RENAME [drive:][path]filename1 filename2. REN [drive:][path]filename1
filename2.
Note that you cannot specify a new drive or path for your destination
file.
Finally, if you just like making things hard, you could use a Script Task and leverage the System.IO.Directory's Move method but on behalf of everyone who has to maintain novel approaches to solving problems, just use the File System Task

WiX: Rename a folder during installation

I have very complex folders structure to install (dozens of folders/subfolders).
I have prepared the whole structure with heat.exe, but some folder names have "template" names instead of the real ones.
Is it possible using WiX to rename the "templated" folders during the installation?
Say I have
DirA
DirTemplate1
DirC
DirD
DirTemplate2
DirE
I can get real names for DirTemplate1 and DirTemplate2 via UI only.
Can I rename the folders after they are copied to the target?
I suppose that you familiar with WiX. And explain a few variants how it could be done.
In directory table you named needed folders with CAPITAL letters, for example DIRTEMPLATE1. Then create dialog window and set this Directory with new value. During installation directory will be created with new folder name.
(Not recommended) Create custom action which will rename needed directories at the end of installation. Not recommended because uninstallation won't delete new folders, the Repair won't work as should.
I realized that this is simply not possible to do in a right way, it contradicts the installation ideology. I would accept such answer and start thinking on a different solution. Not all problems have a solution.

MSBuild: Task to embedding a file before compilation

I have the following need:
I'll have to create an MSBuild task that will produce an xml file, which I then need to embed as a resource to one of the projects being built. How do I change my MSBuild proj to accomplish that? Is there a built-in task I can use for embedding the file, or do I need to create one? If the latter, any direction on that would be great.
Thanks in advance!
Update: based on the suggestions given, I've ended up adding an empty xml file to the project as a resource, creating a simple MSBuild custom task (http://bartdesmet.net/blogs/bart/archive/2008/02/15/the-custom-msbuild-task-cookbook.aspx) that writes content to that file as I need it, and running that task as a "BeforeBuild" target. Works like a charm. Note that I've had to "exclude the file from source control", so it won't get checked out every time I build the project, and I've also added some code to the task to make sure the file isn't read-only (http://www.del337ed.com/blog/index.php/2007/09/05/clearing-the-read-only-flag-on-a-file-in-c/).
If you don't need to create the whole Xml file from scratch and could add a stubb file to your project you could use the XmlPoke Task to update this file in the BeforeBuild Target (see Sergios answer).
You can use builtin in your .csproj/.vbproj file target BeforeBuild (not forget to uncomment it) and call required MSBuild task in BeforeTarget. In that project add that resource as embedded. That's all.

MSBuild extensionpack Copy all the contents of a Directory to another

I am using MSBuild extensionpack. I'd like to copy the entire contents of the build directory to another directory on the file system. I do not want to rename the destination directory, just replace the contents. It could be my unfamiliarity with msbuild extensionpack but it seems like this should be easy and I have been unable to find readily available documentation on the web.
I am trying to set up a service that is automatically deployed in the Continuous Integration environment after a successful build.
As far as I remember, you'll need to clear and copy in separate steps. So do the delete/purge first, then copy over. I wasn't able (at the time I last did) to find a way to "overwrite". This actually worked better for us b/c one build may remove files that a previous one contained, so we wouldn't want them to "linger".
To delete, try (assuming DeploymentDesintationPath is a property with the path):
<MSBuild.ExtensionPack.FileSystem.Folder
TaskAction="RemoveContent"
path="$(DeploymentDestinationPath)" />
And then copy (notice you need to populate an itemgroup for both the source and the destination)
<ItemGroup>
<DeploymentSourceFiles
Include="$(BuildFolder)\**\*"
/>
<DeploymentDestinationFiles
Include="#(DeploymentSourceFiles->
'$(DeploymentDestinationPath)\%(RecursiveDir)%(Filename)%(Extension)')"
/>
</ItemGroup>
<Copy SourceFiles="#(DeploymentSourceFiles)"
DestinationFiles="#(DeploymentDestinationFiles)" />
I haven't done this in a few months, so pardon if any of these examples require a bit of tweaking.

Create MSBuild task that recursively copies a folder to several projects in my solution

I'm new to MSBuild and I tried reading up on several sources on the net but I'm missing somet things..
Here's what I want:
A build task that on execution recursively copies a directory structure from a (hardcoded/configured) path on my machine to a set of projects in the solution
Then compiles (release/debug, I guess I can make two sets of them)
Preferably this process would be called when I press f5 in VS and is selectable from the release/debug dropdown (with a different name off course).
What I don't get yet:
Where do I place my .proj file? In my root (where my sln file is)?
How can I make VS pick it up (bind it to f5).
Look at the Copy Task examples on how to copy a file structure recursively.