In the past, I admit, I was a GAC’cer. Yes, that means that I would run GACUTIL to deploy minor code changes to BizTalk Ochestrations.
Where I currently work, that is not the best practice for several reasons. One reason is that if you create an MSI after doing the GAC, the MSI will not contain the newest DLL. At other places I worked, this was not an issue, because we used the BizTalk Deployment Framework (BTDF).
Last week, I had an orchestration that was rather difficult to test in my own environment. So I wanted to compile it, deploy the .DLL to our QA environment, and test it there. But I had to do this over-and-over, making minor little changes.
The manual process was:
- Stop the orchestration (and make sure to terminate any suspended instances).
- Go to the “Add Resource”, click a button to find the .DLL, wait a few seconds, then click a few check boxes, and click the “OK” button, and wait a few more seconds.
- Since we had two machines in our QA environment, I had to repeat Step 2 on the second machine.
- Then start the orchestration
- Then restart the host instances (so the new code would be picked up)
I vaguely remember the BTSTASK command, but haven’t used it for years outside of BTDF, so I looked it up, and created the following .cmd file:
cscript "c:\Program Files (x86)\Microsoft BizTalk Server 2010\SDK\Samples\Admin\WMI\Stop Orchestration\VBScript\StopOrch.vbs" "MyProjNamespace.MyOrchName" "MyAppName" Unenlist "c:\Program Files (x86)\Microsoft BizTalk Server 2010\BTSTask.exe" AddResource /ApplicationName:MyAppName /Type:System.BizTalk:BizTalkAssembly /Overwrite /Source:MyProjNamespace.dll /Options:GacOnAdd,GacOnInstall,GacOnImport >ReplaceResources_Log.txt cscript "VBScript\StartOrch.vbs" "MyProjNamespace.MyOrchName" "MyAppName"
The program called StopOrch.vbs existed in the BizTalk provided SDK/examples. However, there was no StartOrch.vbs, so I had to create the VBScript to start an orchestration (see link to separate blog on that). Heres the MSDN Doc for BTSTask with the AddResource parameter.
I’m still doing Step 5 manually. I copy the .DLL to server1 and server 2 in the BizTalk group. I then run the above script on each server. Then I restart the host instances manually.