I am working on a .Net 4.0 WPF application targeting SQL 2008R2. There are 2 WPF UI's - A desktop UI and Windows 8 Tablet UI. There is also a web app. The UI's and web app all connect to the backend via an MVC 4 Web API running in IIS on both mine and the client's servers.
I use my server for testing and we also have the client's production server.
I have myself and 2 other developers all working remotely. We develop on our PC's and check into TFS online.
Then, when we're ready to test, I check out and compile.
For the UI's I publish a Click Once. Before I publish the UI's, I have to change the target IP addresses in the Config file, which I sometimes forget to do.
For the API I publish to a local folder, then copy to the IIS folder on my server. When the API is tested I repeat the copy process into IIS on the client's server by zipping the files, remote in, copy the ZIP, and extract to their server's IIS.
For DB changes I generate scripts with a tool I created (for new tables) and manually create scripts for minor changes (Column adds/changes, etc). I have SQL Compare, and sometimes I'll grab a copy of the client's DB and use it to generate a change script, then publish that script on both servers.
The problem is that this whole process is very error prone.
Now, I would like to introduce an extra layer - a Test DB, Test API, and Test UI so when I publish changes on the client's server I'm not targeting the production environment until the client is satisfied.
What's the right way to handle all of this?
Thanks