DS1.背景:
 
我们为什么要将VS2008命令行编译.sln文件集成到右键菜单呢?
原因一:VS2008很好很强大,但太费系统资源了,尤其是在虚拟机在里面装VS2008的时候更是如此。
原因二:有时用vi工具编辑了源代码后,不想开VS集成开发环境进行编译,(当然你可以打开VS2008命令行,再切换到工程所在目录进行编译,但是手动敲命令太麻烦了)。
 
DS2.显示效果图:

 
 
DS3.原始注册表文件:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell]
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\build]
@="编译(Debug)"
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\build\command]
@="cmd /K \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\"\""

[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\buildRelease]
@="编译(Release)"
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\buildRelease\command]
@="cmd /K \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\" /p:Configuration=Release\""

[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\reBuild]
@="重新编译(Debug)"
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\reBuild\command]
@="cmd /K \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\" /t:Rebuild\""

[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\reBuildRelease]

@="重新编译(Release)"

[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\reBuildRelease\command]
@="cmd /K \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\" /t:Rebuild /p:Configuration=Release\""

 
DS4.具体代码及解释:
Windows Registry Editor Version 5.00  
--这是注册表文件的注释文件头,其作用是声明这是一个注册表文件,便于注册表编辑器将文件内容导入注册表。

--如果 .reg 文件没有这句文件头,或者文件头书写有错漏,那么就无法成功导入注册表。

[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell]  
--HKEY_CLASSES_ROOT\.sln, 右边的默认值为: VisualStudio.Launcher.sln,表示仅集成 .sln文件。
--你可以写成 .csproj 或者.vbproj ,即可以对C#和VB的项目进行右键编译。
--在  HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell 下面增加一个子项即可添加右键菜单。
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\build]  
--build 即命令名,编译(Debug)即显示在右键菜单上的命令名。command是具体的DOS命令
@="编译(Debug)"  
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\build\command]  
@="cmd /K \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\"\""
--利用 cmd /K 命令,在执行了以上命令后保持命令行窗口不退出,以便查看编译结果。不然会窗口一闪就不见了。
--注册表集成右键菜单时,%1代表该文件名。
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\buildRelease]  
@="编译(Release)"  
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\buildRelease\command]  
@="cmd /K \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\" /p:Configuration=Release\""
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\reBuild]  
@="重新编译(Debug)"  
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\reBuild\command]  
@="cmd /K \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\" /t:Rebuild\""
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\reBuildRelease]  
@="重新编译(Release)"  
[HKEY_CLASSES_ROOT\VisualStudio.Launcher.sln\Shell\reBuildRelease\command]  
@="cmd /K \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\" /t:Rebuild /p:Configuration=Release\""
 
 
DS5.where to find Msbuild.exe ??

.NET v2.0: 
%WinDir%\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe

.NET v3.5: 
%WinDir%\Microsoft.NET\Framework\v3.5\MSBuild.exe

.NET v4.0: 
%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe

eg:C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe

 
DS6.下面具体分析一句代码:
cmd  /k  \"C:\\WINDOWS\\Microsoft.NET\\Framework\\v3.5\\MSBuild.exe \"%1\"  /p:Configuration=Release\""

常用参数:

/t:Rebuild   重新编译
/t:Clean      清理生成,将删除所有中间文件和输出文件,仅保留项目和组件文件。 
/p:Configuration=Release  以Release模式进行编译
/p:Configuration=Debug   以Debug模式进行编译
 
DS7.两种模式的区别:

Debug:通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

Release:称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用(不能对其进行调试操作)。

注意:给用户使用的必须是Release版本。
 
事实上,编译目录下面有一个obj目录,里面也有一个Debug目录。
在Debug目录的下面,有一个TempPE目录和一个Refactor目录。
这个以后再说。。。
 
 
DS8.补充一个用命令行直接编译项目文件的方法:
用DOS命令对解决方案进行编译操作:
 
 
 
 
1、打开Visual Studio 2008 命令提示,具体打开方法如下:
 
2、帮助文档如下:

3、操作方法如下:

 2015-01-03
 
 
 
 
 
 

Msbuild项目集成右键菜单编译的更多相关文章

  1. 关于安装Git后,项目目录右键菜单无Git Bash Here命令的选项

    修改注册表配置 1.第一步,window + R,输入regedit回车进入注册表 2.依次进入HKEY_CLASSES_ROOT --> Directory -->Background ...

  2. 如何去除WIN7任务栏项目上右键菜单中的最近访问一栏

    运行gpedit.msc-->用户配置-->管理模板-->任务栏和开始菜单-->将"不保留最近打开文档的记录"和"退出系统时清空最近打开文档的记录 ...

  3. 基于electron+vue+element构建项目模板之【自定义标题栏&右键菜单项篇】

    1.概述 开发平台OS:windows 开发平台IDE:vs code 本篇章将介绍自定义标题栏和右键菜单项,基于electron现有版本安全性的建议,此次的改造中主进程和渲染进程彼此语境隔离,通过预 ...

  4. Maven问题总结:Eclipse中项目右键菜单中点击Maven->Update Projects时JDK被重置

    Eclipse中在项目右键菜单点击->Maven->Update Projects时,JDK总是切回 1.5 如果没有在Maven中配置过JDK版本,只是在Eclipse中项目的Prope ...

  5. [msys2]集成到右键菜单

    集成到右键菜单 在资源管理器中,空白处右键(right-clicking on folder backround in Windows Explorer)会弹出菜单,其中有如"在此处打开cm ...

  6. 【项目经验】--EasyUI DataGrid之右键菜单

    前两天验收项目,老总提了一个不是需求的需求,为什么这么说呢?因为我们的管理不到位!话说当天,我们UI系统下发了一个总文件,上面写着"各个系统找一个没有添加UI的模块去添加最新版本UI进行测试 ...

  7. Linux上Eclipse项目右键菜单没有Maven

    在Centos 7上安装了eclipse以后,着实很兴奋.eclipse luna版本自带maven.但是用mvn eclipse:eclipse创建的java工程,在右键菜单居然没有Maven按钮, ...

  8. sublime使用技巧之添加到右键菜单、集成VI

    熟悉开发工具,减少多余的操作流程有助于提高开发效率,而Sublime Text 2是sublime产品的经典版本,因此本文基于Sublime Text 2讲解sublime的使用技巧. VI的主要作用 ...

  9. 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单、书签等相关问题

    2015-03-02 更新文章,由于需求修改,更改了flexpaper插件,故增加第9.10.11小节,下载代码时请注意. 先废话几句.最近用到文档在线浏览功能,之前用的是print2flash(一个 ...

随机推荐

  1. Golang 效率初(粗)测

    从接触 Golang 开始,断断续续已有差不多一年左右的时间了,都是业余自己学学看看,尚主要限于语法及语言特性,还没有用它写过实际的项目. 关于 Golang 的语法及语言特性,网上有很多资源可以学习 ...

  2. Python3基础 列表之间+ 合并,不去除重复项

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  3. sql-将字符串按指定字符分割插入指定表中

    CREATE PROC SPLIT( @STR VARCHAR(MAX), --截取字符串 ), --截取字符 ) --存放表名 ) AS BEGIN ) IF(OBJECT_ID(@TABLE) I ...

  4. 关于欧几里得算法求最大公约数,即OJ1029的参考解法

    #include <stdio.h> int main(int argc, char *argv[]) { int a,b,c; scanf("%d %d",& ...

  5. 遗传算法在JobShop中的应用研究(part 6:结果显示)

    def FormatSolution(s, C, I): T = [0 for j in xrange(I.n)] S = [[0 for t in I[j]] for j in xrange(I.n ...

  6. python os模块(2)

    os模块主要用于:目录.文件(删除.判断.分割文件名和后缀) 目录 (1)获取当前目录(2)修改目录(3)生成目录(4)删除目录(5)查看目录下的内容(6)重命名目录(7)修改时间属性(8)链接目录( ...

  7. Kanzi编程基础3 - 图片读取与显示

    Kanzi开发的时候会遇到需要从外部读取图片的情况.Kanzi2.8版本和3.3版本读取方法稍有不同,我们先看看2.8版本的api. [2.8版本] 1)首先要从文件中读取一张图片 struct Kz ...

  8. sublime-text3 3059基本配置

    1.下载安装官方版注册机语言包 参考安装: http://www.xiumu.org/note/sublime-text-3.shtml 2.插件 Package ControlConvertToUT ...

  9. asp.net 时间操作

    /*在dt上加天数*/ DateTime dt = DateTime.Now.AddDays(); /*将指定的天数加到此实例的值上: 即以当前日期为基础的情况下上加上30天.*/ DateTime ...

  10. java利用Scanner获取键盘输入

    首发地址:我的网易博客 在运行一个java程序的时候,可能我们需要在运行的时候传递一些参数进去...咋办呢... java提供了一个Scanner类,利用这个类,我们可以很方便的获取键盘输入的参数.. ...