背景:
由于TFS服务器在国外的客户处,导致每次生成新的build,复制到本地局域网需要近一个小时的时间,由于使用的是远程桌面mstsc登录的方式,经常发生同一个账户多个人登录,导致复制了一半,连接中断,又不得不重新复制。所以需要写一个自动下载build到本地局域网的程序。而且我们又不能修改TFS的生成设置,也不能修登录TFS所在的机器,还需要对代码进行一些验证例如stylecop,Fxcop。通过对本程序的扩展支持其他一些验证。
需要解决的问题:
1Build何时build成功?2获取下载地址?3如何通过远程登录的方式自动下载?4如何支持stylecop,Fxcop的验证?
1Build何时build成功?
我的做法是通过轮询的方式进行查询,本身并不难,只是文档很少,很难找到TFS相关文档。
参考文献
2获取下载地址?
其实第一步查询到的信息中包含下载地址,但调试时,怎么都读不到数据,后来才知道需要在C:\Windows\System32\drivers\etc\hosts文件中做映射,把IP和机器名相互对应。否则下载地址是机器名,没办法解析成IP,导致下载失败。
3如何通过远程登录的方式自动下载?
由于没有在同一个局域网,导致必须通过远程桌面mstsc登录的方式自动连接,然后把下载好的文件复制到本地局域网。
找了很长时间都没有发现通过mstsc命令行或者代码的方式自动登录。mstsc命令行有一个文件的参数,可自己试了多次,但依然需要手动输入密码。想要自动下载肯定不能这样。
幸好找到一种相当于共享文件夹的方式。这样就避开了自动远程桌面mstsc登录的这个难题。
下载的实际过程,其实很简单,根据查询到的下载地址,压缩到远程登录机器上的一个文件夹,然后再从此文件夹复制到本地局域网的共享文件夹。
4如何支持stylecop,Fxcop的验证?
其实思路基本是一致的,只要把代码下载到本地局域网,任何验证都是可以处理的。
Remote Desktop Services API Functions
远程桌面连接最后一幅图包含怎么在远程登录的机器上共享登录机的磁盘
C#访问远程主机资源的方法
如何:连接到远程计算机
使用VB越过远程登录的代码
set sh=WScript.CreateObject("WScript.Shell") sh.run("cmd") WScript.Sleep 1000 sh.SendKeys "telnet 10.32.148.224" WScript.Sleep 3000 sh.SendKeys "{ENTER}" WScript.Sleep 3000 sh.SendKeys "{ENTER}" WScript.Sleep 3000 sh.SendKeys "Administrator{ENTER}" WScript.Sleep 3000 sh.SendKeys "o7a@bj{ENTER}" WScript.Sleep 3000 sh.SendKeys "C:\Xian\CopyToPackage.bat{ENTER}" WScript.Sleep 3000 sh.SendKeys "C:\Xian\build.bat{ENTER}" WScript.Sleep 3000 sh.SendKeys "C:\Xian\CopytoAgent.bat{ENTER}" WScript.Sleep 1000 sh.SendKeys "exit{ENTER}" WScript.Sleep 1000 sh.SendKeys "exit{ENTER}" REM Setup current directory and path to MSBuild setlocal pushd %~dp0 set TARGET="%1" if "%1" == "" (set TARGET=Rebuild) set CONFIGURATION="%2" if "%2" == "" (set CONFIGURATION=Debug) set MSBUILDCMD="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe" /p:Configuration=%CONFIGURATION% /t:%TARGET% %MSBUILDCMD% Common\Coinstar.Coin.Common\Coinstar.Coin.Common.sln if ERRORLEVEL 1 GOTO error %MSBUILDCMD% Kiosk\Coinstar.Coin.Kiosk.Common\Coinstar.Coin.Kiosk.Common.sln if ERRORLEVEL 1 GOTO error %MSBUILDCMD% Kiosk\Coinstar.Coin.Kiosk.Devices\Coinstar.Coin.Kiosk.Devices.sln if ERRORLEVEL 1 GOTO error %MSBUILDCMD% Kiosk\Coinstar.Coin.Kiosk.BusinessManager\Coinstar.Coin.Kiosk.BusinessManager.sln if ERRORLEVEL 1 GOTO error %MSBUILDCMD% Kiosk\Coinstar.Coin.Kiosk.Product\Coinstar.Coin.Kiosk.Product.sln if ERRORLEVEL 1 GOTO error %MSBUILDCMD% Kiosk\Coinstar.Coin.Kiosk.Ui\Coinstar.Coin.Kiosk.Ui.sln if ERRORLEVEL 1 GOTO error popd exit /b 0 :error popd pause exit /b 1
源代码下载