Visual Studio 命令提示 工具原理解析

觀察“Visual Studio 2005 命令提示”的屬性,發現運行“Visual Studio 2005 命令提示”即運行

 %comspec% /k ""d:/Microsoft Visual Studio 8/VC/vcvarsall.bat"" x86

其中 comspec即%SystemRoot%/system32/cmd.exe,故以上命令行即“以x86爲參數,運行vcvarsall.bat批處理文件”

查看vcvarsall.bat文件的源代碼

@echo off
if 
"%1" == "" goto x86
if not 
"%2" == "" goto usage

if /i %
1 == x86       goto x86
if /i %
1 == amd64     goto amd64
if /i %
1 == x64       goto amd64
if /i %
1 == ia64      goto ia64
if /i %
1 == x86_amd64 goto x86_amd64
if /i %
1 == x86_ia64  goto x86_ia64
goto usage

:x86
if not exist 
"%~dp0binvcvars32.bat" goto missing
call 
"%~dp0binvcvars32.bat"
goto :eof

:amd64
if not exist 
"%~dp0binamd64vcvarsamd64.bat" goto missing
call 
"%~dp0binamd64vcvarsamd64.bat"
goto :eof

:ia64
if not exist 
"%~dp0binia64vcvarsia64.bat" goto missing
call 
"%~dp0binia64vcvarsia64.bat"
goto :eof

:x86_amd64
if not exist 
"%~dp0bin†_amd64vcvarsx86_amd64.bat" goto missing
call 
"%~dp0bin†_amd64vcvarsx86_amd64.bat"
goto :eof

:x86_ia64
if not exist 
"%~dp0bin†_ia64vcvarsx86_ia64.bat" goto missing
call 
"%~dp0bin†_ia64vcvarsx86_ia64.bat"
goto :eof

:usage
echo Error in script usage. The correct usage is:
echo     %
0 [option]
echo where 
[option] is: x86 ^| ia64 ^| amd64 ^| x86_amd64 ^| x86_ia64
echo:
echo For example:
echo     %
0 x86_ia64
goto :eof

:missing
echo The specified configuration type is missing.  The tools for the
echo configuration might not be installed.
goto :eof

不難發現,實際運行的代碼是

:x86
if not exist "%~dp0bin/vcvars32.bat" goto missing
call "%~dp0bin/vcvars32.bat"
goto :eof

即運行當前目錄下的bin目錄下的vcvars32.bat文件,這個文件的內容非常簡單,如下:

"%VS80COMNTOOLS%vsvars32.bat"

其中VS80COMNTOOLS爲系統變量,在我的機器上取值d:/Microsoft Visual Studio 8/Common7/Tools/

故找到該目錄,並查看其下的vsvars32.bat,代碼如下

@SET VSINSTALLDIR=d:Microsoft Visual Studio 8
@SET VCINSTALLDIR
=d:Microsoft Visual Studio 8VC
@SET FrameworkDir
=C:WINDOWSMicrosoft.NETFramework
@SET FrameworkVersion
=v2.0.50727
@SET FrameworkSDKDir
=d:Microsoft Visual Studio 8SDKv2.0
@if 
"%VSINSTALLDIR%"=="" goto error_no_VSINSTALLDIR
@if 
"%VCINSTALLDIR%"=="" goto error_no_VCINSTALLDIR

@echo Setting environment for using Microsoft Visual Studio 
2005 x86 tools.

@rem
@rem Root of Visual Studio IDE installed files.
@rem
@set DevEnvDir
=d:Microsoft Visual Studio 8Common7IDE

@set PATH
=d:Microsoft Visual Studio 8Common7IDE;d:Microsoft Visual Studio 8VCBIN;d:Microsoft Visual Studio 8Common7Tools;d:Microsoft Visual Studio 8Common7Toolsin;d:Microsoft Visual Studio 8VCPlatformSDKin;d:Microsoft Visual Studio 8SDKv2.0in;C:WINDOWSMicrosoft.NETFrameworkv2.0.50727;d:Microsoft Visual Studio 8VCVCPackages;%PATH%
@set INCLUDE=d:Microsoft Visual Studio 8VCATLMFCINCLUDE;d:Microsoft Visual Studio 8VCINCLUDE;d:Microsoft Visual Studio 8VCPlatformSDKinclude;d:Microsoft Visual Studio 8SDKv2.0include;%INCLUDE%
@set LIB=d:Microsoft Visual Studio 8VCATLMFCLIB;d:Microsoft Visual Studio 8VCLIB;d:Microsoft Visual Studio 8VCPlatformSDKlib;d:Microsoft Visual Studio 8SDKv2.0lib;%LIB%
@set LIBPATH=C:WINDOWSMicrosoft.NETFrameworkv2.0.50727;d:Microsoft Visual Studio 8VCATLMFCLIB

@goto end

:error_no_VSINSTALLDIR
@echo ERROR: VSINSTALLDIR variable is not set. 
@goto end

:error_no_VCINSTALLDIR
@echo ERROR: VCINSTALLDIR variable is not set. 
@goto end

:end

不能發現此文件的作用即爲完成與VS2005相關的一些系統變量的設置,如:

VSINSTALLDIR——VS2005的安裝路徑;

VCINSTALLDIR——VC的安裝路徑;

FrameworkDir——Framework2.0的安裝路徑;

等等。

這樣,如果我們需要自己寫一個批處理文件,完成一些VS2005相關的設置,調用VS2005提供的一些工具(如gacutil,該工具在D:/Microsoft Visual Studio 8/SDK/v2.0/Bin目錄下,該目錄沒有被Path系統變量引用,故該命令無法直接在cmd中運行),就可以在批處理文件的開頭先調用vsvars32.bat,然後在調用VS2005的相關工具。代碼舉例如下:

call "%VS80COMNTOOLS%vsvars32.bat"
gacutil /i YejunWorkshop.IDUControlLibrary.Design.dll

該批處理文件直接運行即可將YejunWorkshop.IDUControlLibrary.Design.dll程序集添加到GAC中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章