Msbuild项目集成右键菜单编译

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

 
 
DS3.原始注册表文件:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTVisualStudio.Launcher.slnShell]
[HKEY_CLASSES_ROOTVisualStudio.Launcher.slnShelluild]
@="编译(Debug)"
[HKEY_CLASSES_ROOTVisualStudio.Launcher.slnShelluildcommand]
@="cmd /K "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe "%1"""

[HKEY_CLASSES_ROOTVisualStudio.Launcher.slnShelluildRelease]
@="编译(Release)"
[HKEY_CLASSES_ROOTVisualStudio.Launcher.slnShelluildReleasecommand]
@="cmd /K "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe "%1" /p:Configuration=Release""

[HKEY_CLASSES_ROOTVisualStudio.Launcher.slnShell eBuild]
@="重新编译(Debug)"
[HKEY_CLASSES_ROOTVisualStudio.Launcher.slnShell eBuildcommand]
@="cmd /K "C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe "%1" /t:Rebuild""

[HKEY_CLASSES_ROOTVisualStudio.Launcher.slnShell eBuildRelease] 

@="重新编译(Release)" 

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

.NET v3.5: 
%WinDir%Microsoft.NETFrameworkv3.5MSBuild.exe

.NET v4.0: 
%WinDir%Microsoft.NETFrameworkv4.0.30319MSBuild.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
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/selonsy/p/4199656.html