Sharing checked out source between Visual Studio instances on Virtual Machines using a network share
I have a lot of Virtual Machines and having to checkout a large code base from source control to each box is annoying and time consuming. There are a couple of branches that take almost an hour to get the latest code.
I am using Visual Studio and TFS. Visual Studio and TFS is installed on all my VMs. So I set out to have the VM host store the source and then all the Virtual Machines map a drive to the host.
At first this appeared to work just fine, but then I started to run into errors. I fixed the errors one at a time.
There were a few things I had to do to make this work and I thought I would share them:
System Changes
- Map the drive and make it persistent. That means the drive stays mapped after reboot.
- Add the mapped drive as a local intranet site in Internet Explorer’s Security settings.
Visual Studio Changes
- Make sure to always log into to TFS in Visual Studio with the same user account. There will be TFS problems if you use a different user account.
- Add the loadFromRemoteSources tag to the section of the devenv.exe.config file and set it to true:
Note: I had to run Notepad++ as administrator to make this change.
Visual Studio 2010:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe.configVisual Studio 2012
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe.config - Add the loadFromRemoteSources tag to other .config files.
Note: In order to debug a web service, I had to also add this tag to the WcfSvcHost.exe.config.Visual Studio 2010:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\WcfSvcHost.exe.configVisual Studio 2012
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\WcfSvcHost.exe.configIn that IDE folder there were a 22 .config files in VS 2010 and 32 in VS 2012. I am not sure which ones will ever need this. There are two schools of thought: 1. Add the loadFromRemoteSources tag to all of the config files or 2. Add them only when you encounter and error. Since I am in a lab environment and everything is on one physical box (the host and the hosted VMs) I went ahead and added this to all the config files.
- Sometimes when running Visual Studio as administrator, the mapped drive appears off line. Simple click File | Open | File and browse to the network drive. You don’t have to actually open anything. Just click cancel. It seems as soon as you browse to the mapped drive, Visual Studio knows about it and everything works fine.This doesn’t seem to work as well in VS 2012 on Windows Server 2012. You may even have to have the drive mapped twice. Once as the logged in user and once as the Administrator. To do this open two command prompts: 1. A regular command prompt. 2. A command prompt running as Administrator. Run the mapped drive command in both: (Yes, use the same drive letter in both on Windows 2013 or Windows 8)
net use z: \\pcname.domain.tld\yourshare /PERSISTENT:YES
Be aware you’ll get more prompts
I noticed than when running executables orVBScripts or PowerShell scripts, that I was prompted. This is because your running them from a network share, which is completely fine as long as you trust the network share.
Conclusion
Having all your Virtual Machines share the same source repository is possible and saves a lot of time checking out code as you don’t have to do it an each Virtual Machine.
Doing this for multiple users did not work well as the we used TFS and the source seemed to be tied to the user.
I have not yet tried to share between VS 2010 and VS 2012. I hope that works…I’ll update when I know.