MSBuild 命令行编译项目且不包含pdb文件

对于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.


你可能感兴趣的:(C#)