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. HAProxy配置SSL

    前沿 据悉苹果强制APP在2016年底使用ATS协议,所以公司准备将部分站点http统一替换成https.所有我们就得测试下 1.首先原有的haproxy1.5升级到了1.7版本支持ssl 2.查看相 ...

  2. Object-C

    #import <Foundation/Foundation.h> #pragma mark 狗类的声明 @interface Dog:NSObject { @public NSStrin ...

  3. 【转】}目前比较全的CSS重设(reset)方法总结

    在当今网页设计/开发实践中,使用CSS来为语义化的(X)HTML标记添加样式风格是重要的关键.在设计师们的梦想中都存在着这样的一个完美世界:所有的浏览器都能够理解和适用多有CSS规则,并且呈现相同的视 ...

  4. Java开发中经典的小实例-(swich(){case:参数break;default: break;})

    import java.util.Scanner;public class Test6 {    public static void main(String[] args) {        // ...

  5. dll的导入库(lib)输出路径

    创建动态链接库项目A, 它会生成:dll, lib, exp 等,其中 lib & exp 生成的路径设置在:[Linker]->[All Options]->[Import Li ...

  6. 把 Mac 上的 bash 换成 zsh

      本人补充:mac版git下载地址:http://code.google.com/p/git-osx-installer/downloads/list?can=3&q=&sort=- ...

  7. jQuery innerWidth outerWidth(false/true)

    outerWidth默认为false

  8. [重要公告] 关于禁止发布Windows系统及非法激活软件的通知

    Skyfree 发表于 2013-11-15 09:45:17 https://www.itsk.com/thread-306891-1-1.html 接微软方面法务通知,要求删除涉及发布Win8/8 ...

  9. JS刷新父窗口的几种方式<转>

    常用的有:   window.opener.location.reload();    和  window.location.reload(); 浮层内嵌iframe及frame集合窗口,刷新父页面的 ...

  10. List去重复(不是最简单,但绝对是最易理解)

    for (int i = 0; i < courselist.size(); i++) //外循环是循环的次数 { for (int j = courselist.size() - 1 ; j ...