码迷,mamicode.com
首页 > 其他好文 > 详细

Msbuild项目编译

时间:2015-01-03 17:12:11      阅读:568      评论:0      收藏:0      [点我收藏+]

标签:

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项目编译

标签:

原文地址:http://www.cnblogs.com/selonsy/p/4199656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!