Automating Remote GAC Installs On Build
When working with SharePoint, you’ll find yourself working with the GAC quite often during development.
If you’ve seen the light and you’re working with SharePoint on a VM, one tricky problem is how to update the GAC using a post-build event. The following is a little script that I use:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
::----------------------- GAC binaries code ------------------------ :: Check if the share is available on the server IF EXIST "\\server-name\temp" GOTO COPYFILES GOTO SHOWNOTICE :: Copy file to the server :COPYFILES ECHO Found \\server-name\temp; proceeding to copy files... SET SN=\\server-name\temp :: Copy the binary XCOPY "$(TargetPath)" "%SN%" /Y /I :: Use PsExec to execute gacutil PATH=$(SolutionDir)Tools;%windir%\Microsoft.Net\Framework\v2.0.50727;%programfiles%\Microsoft SDKs\Windows\v6.0\Bin;%path% psexec \\server-name -u Administrator -p password -w "c:\temp" gacutil.exe /i "$(TargetFileName)" /f GOTO END :SHOWNOTICE ECHO Your VM image is not sharing the directory "c:\temp" GOTO END :END ECHO Completed |
The batch script makes use of Sysinternal’s PsExec. I’ve included the binary executable in my solution tree under the directory “Tools”.
The script only has one assumption: the VM (or remote machine, really) is sharing the c:\temp directory (okay, and that the path to gacutil.exe has been added to the remote machine’s PATH environment variable). Here’s a breakdown of the logic:
- The first step is to check if the directory exists and can be reached. If not, we go to the end and show a notice about sharing the directory.
- If the directory is shared, the output dll from the build is copied to the shared directory using plain old XCOPY.
- Once it’s copied over, we use PsExec to execute gacutil on the VM (or remote machine). The -w argument specifies the working directory on the remote machine.
Enjoy!