对于coder来说,编译代码常用的是visual studio下面的IDE 右键功能。但有时可能要批量或者定时编译项目,如何处理呢?
1. devenv。visual studio自带的编译工具,devenv.com/devenv.exe,前者是命令行工具,后者是IDE工具。使用前提是环境中安装了visual studio。工具路径:“C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE”。
devenv project.sln /build "release" .等同于vs下的右键生成(解决方案)
2.msbuild。其实vs编译项目或解决方案后台调用的是此命令。针对vs2005+以后的项目,不需要安装vs。工具路径:C:\Windows\Microsoft.NET\Framework。
msbuild project.sln /p:configuration=Release /t:Rebuild.
针对编译后生成的文件类型主要有以下几种:
1. dll. 类库文件
2. exe 可执行文件
3. exe.config 配置文件
4 pdb 程序数据库文件(主要用于调试)
5.vshost.exe 调试宿主文件
6.vshost.exe.config 宿主配置文件
7.vshost.exe.manifest 宿主清单文件
在实际的版本发布中我们需要用到的是1,2,3三类文件,但是其它文件在编译时也会生成,如何去掉这些不需要的文件呢?
1.vs开发IDE中在项目属性中可以设置是否生成不必要的文件。
在项目属性-->生成-->高级-->调试信息-->none可以不生成pdb文件。
在项目属性-->调试-->启用调试器-->启用visual studio承载进程(去掉勾选)可以不生成.vshost.*文件。
2.msbuild.在上面我们提到,vs实际上调用的是msbuild来进行编译,所以vs中相关设置大部分都可以在msbuild中找到相对应的设置。
msbuild project.sln /p:Configuration=Release /t:Rebuild. release模式下编译没有.vshost相关文件,但.pdb文件依然存在(虽然此文件和debug模式下不一样)。
msbuild project.sln /p:Configuration=Release;DebugType=none /t:Rebuild.添加debugtype设置可以控制pdb文件的生成和类型。帮助中有个DebugSymbols=false属性可以控制pdb文件的生成,但我测试没有效果,有知道详情的可以补充下。
编译网站和编译类库或winform项目类似,但想直接发布网站,类似VS IDE下的右键发布。
1.vs右键发布,选择发布的目标路径就可以发布。
2.msbuild.有类似的参数控制执行相同的操作。vs2010环境下的样例:
msbuild website.csproj /t:ResolveReferences;Compile;_WPPCopyWebApplication /p:Configuration=Release;DebugType=none;WebProjectOutputDir=..\Publish.
此命令发布完网站后会丢失部分dll文件(间接依赖),修改成如下命令即可避免:
msbuild website.csproj /t:_WPPCopyWebApplication;ResolveReferences;Compile /p:Configuration=Release;DebugType=none;WebProjectOutputDir=..\Publish.