作者:朱金灿
来源:http://blog.csdn.net/clever101
我遇到这样一个问题:在一个插件工程目录下的插件工程越来越多,因此通过建一个解决方案然后把新增加的工程逐个添加进解决方案变得越来越繁琐。我设想使用Jscript编程通过创建一个空的解决方案,然后遍历该文件夹下的vc工程,把该文件夹的vc工程都加到这个空的解决方案,然后编译这个解决方案。今天鼓捣了,成功了。开始以为只需新建一个空解决方案,然后把所有工程加到这个解决方案就行,后来发现不行,解决方案文件无法生成,想了折中的办法,为一个工程创建一个解决方案。废话不说了,贴上代码:
main(); function main() { try { var WSShell = WScript.CreateObject("WScript.Shell"); var num = WScript.ScriptFullName.lastIndexOf("\\"); // 获取当前路径 var strCurPath = WScript.ScriptFullName.substr(0,num); var FileSys = WScript.CreateObject("Scripting.FileSystemObject"); // 判断当前文件夹是否存在 if (FileSys.FolderExists(strCurPath)) { // 获取vs2008d的dte对象 var DTE = new ActiveXObject("VisualStudio.DTE.9.0"); DTE.MainWindow.Visible = false; var strPluginFolder = strCurPath + "\\Plugin"; // 判断临时文件夹是否存在,若不存在就创建。临时文件夹用于存放创建 var strTempPath = strCurPath + "\\temp"; if(!FileSys.FolderExists(strTempPath)) { FileSys.CreateFolder(strTempPath); } var PluginFolder = FileSys.GetFolder(strPluginFolder); // 获取所有子文件夹,遍历所有的子文件夹 var PlugSet = new Enumerator(PluginFolder.SubFolders); for (var i = 0 ; !PlugSet.atEnd(); PlugSet.moveNext(),i++) { var strSlnIndex = i; var strProjectFolder = strPluginFolder + "\\"; strProjectFolder = strProjectFolder + PlugSet.item().Name; var ProjectFolder = FileSys.GetFolder(strProjectFolder); // 获取所有的文件 var fenum = new Enumerator(ProjectFolder.Files); for (var j = 0 ; !fenum.atEnd(); fenum.moveNext(),j++) { var strPrjFileName = fenum.item().Name; var strSuff = FileSys.GetExtensionName(strPrjFileName); // 假如文件是vc工程文件,就执行编译 if((strSuff=="vcproj")) { var sln = DTE.Solution; sln.Create(strCurPath,strSlnIndex); var strProjectFolder = strProjectFolder + "\\"; strPrjFileName = strProjectFolder + strPrjFileName; sln.AddFromFile(strPrjFileName); strSlnIndex = strSlnIndex + ".sln"; var strSolution = strTempPath+"\\"; strSolution = strSolution+strSlnIndex sln.SaveAs(strSolution); var solbuild = sln.SolutionBuild; // 编译release版本 solbuild.SolutionConfigurations.Item("Release").Activate() solbuild.Build(true); // 编译debug版本 solbuild.SolutionConfigurations.Item("Debug").Activate() solbuild.Build(true); break; } } } } else { WScript.Echo("the current path isnot exist!"); return; } } catch(e) { WScript.Echo(e.description); } }