Visual Studio编译选项简介
一.概念介绍
一般来讲,能影响VS编译结果的参数有两个:编译优化和目标平台
编译优化
首先要明白一个概念,.Net是一个二次编译模型,所以VS编译的结果是IL代码。而默认情况下VS编译出来的IL代码,会包括很多NOP指令(空指令),还包括许多分支指令等。VS会利用这些指令对程序调试操作提供更好的支持。而所谓的编译优化,就是去掉这些额外的指令,让程序集的体积和运行时所占的内存更小一点。
其它平时更常用的说法叫Debug版与Release版。Debug版就是关闭编译优化的版本,Release版就是打开编译优化的版本。
目标平台
现代操作系统分为32位与64位。32位操作系统可以运行32位程序,64位操作系统可同时运行32位与64位程序。操作系统通过识别程序文件的头来判定程序的类别。如果包括一个PE32头,则是32位程序,如果是PE32+头,则是64位程序。VS的目标平台有3个选项,X86,X64和AnyCpu。如果选择X86,则会在程序集的前面加上一个PE32头,如果选择X64则加上一个PE32+头。而AnyCpu则有点特殊,它将程序集加上一个PE32头,但是CLR会跟据运行环境自动调整JIT编译器编译出的目标机器码。所以如果普通的静态分析工具分析程序集文件会发现它是32位程序,但是运行时却是64位程序。
通过Visual Studio command prompt下的corflags命令则可以确定程序集的实际类别。如果是X86编译,PE:PE32,32BIT:1,如果是X64编译,PE:PE32+,32BIT:0,如果是AnyCpu编译,PE:PE32,32BIT:0。
二.在解决方案中设置编译选项
可以在解决方案属性页中对所有项目提供基础设定。
可以看到,在最上面一行有两个参数分别对应上文所说的概念:配置和平台。这里的配置就是指是Debug模式还是Release模式,选项第一个活动(XXX)表示当前的选择。平台则是表示X86,X64,还是部份X86部分X64混合着用,同样选项里第一个活动(XXX)表示当前的选择。右面的主面板里可以对每个项目进行单独与详细的设置。
这里有几个需要注意的地方,我是经过多次探索才得出结论的。
1.可以看到,在界面上最上面一行有配置与平台选项,在右面主面板里每个项目又有自己的配置与平台选项。但它们所表达的意思是不同的。真正对项目编译起作用的是主面板里的设置,而最上面的设置可以把它想像成主面板相对应设置集的一种编译策略的名字。就如上图所示,配置里选的是Debug,但主面板里有配置成Release模式的项目。举个例子,你可以建一个名叫M的配置,M显示在最上面的配置下拉框里,其中前三个项目是Debug模式,后两个是Release模式,然后再建一个名叫N的平台,N将显示在最上面的平台下拉框里,其中第一个是X86,后面四个是X64模式。
可以通过配置管理器按钮来维护配置集与平台集。
2.直接通过最上面的上拉框是无法改变项目设置的。比如将上面的配置下拉框由活动(Debug)改成Release,当然你可以看到主面板里各个项目的设置确实都已改了。但是如果你点确定,然后再进入本窗口时,却发现最上面的选择仍然是先前的活动(Debug)。这里可以选让你误以为直接可以更改的原因,我猜是方便给你查看的。
3.更改设定会影响生成dll与exe的目录。
平台 |
模式 |
目录 |
AnyCpu,X86 |
Debug |
bin\Debug |
Release |
bin\Release |
|
X64 |
Debug |
bin\X64\Debug |
Release |
bin\X64\Release |
三.在项目中设置编译选项
项目属性页里也可以对具体项目做配置与平台的设置。
可以看到,在最上面一行也有配置与平台的下拉框。如同上面所述一样,这里也是只能看,不能改。
勾选优化代码等同于选择Release模式,也可在目录平台下拉框更改平台选项。
在页面最下面有一个高级按钮,点开后会弹出如下框
这里最重要的就是调试信息了,点开下拉框后显示如下:
这里只有选中full或pdb-only时才会生成pdb文件。pdb全称Program Database,里面保存了IL代码与源代码的对应关系。只有在编译时生成了此文件,源代码才可调试。
四.要注意的问题
由上文可知,程序集的生成目录是被解决方案属性页里的设置影响的,但实际的编译模式却可以被项目属性页更改。这会带来目录名与实际程序集类型不一致的问题。比如你在解决方案里设定为X64平台,但是在项目属性页里却将其目标平台改为X86,结果就是在X64的目录里生成了X86的程序集。这一点一定要注意。
http://www.cnblogs.com/ljzforever/archive/2012/11/02/2751888.html
转载于:https://www.cnblogs.com/vivianlou/p/3853600.html
Visual Studio编译选项简介相关推荐
- Visual Studio 历史简介
Visual Studio 历史简介 N年前,江湖上流传着几个大佬的故事,他们说:Dev-C++灵活又小巧,C++ Builder开发效率高:Turbo C是万人迷,Visual Studio的资格老 ...
- visual studio code 简介
一. 简介 完美替代 notepad++, sublime等的优秀工具. code.visualstudio.com 下载过慢解决 下载过慢, 找到下载地址, 将 host 部分替换为 vscode. ...
- Linux环境中Visual Studio Code 安装配置及其卸载(详细教程)
两篇相关博文: 在VMware15中创建虚拟机安装ubuntu系统(超详细教程) Linux环境编译运行C/C++语言程序----配置gcc.g++(详细教程) 此篇分享我在linux环境下安装VS ...
- Visual Studio.NET
Visual Studio.NET 一. Visual Studio.NET简介 Visual Studio.NET提供了一种编写Windows应用程序的良好环境. VisualStudio.NE ...
- 【Tools】Visual Studio 2019下载和安装
00. 目录 文章目录 00. 目录 01. Visual Studio 2019简介 02. Visual Studio 2019下载 03. Visual Studio 2019安装 04. Vi ...
- 【Tools】Visual Studio 2017下载和安装
00. 目录 00. 目录 01. Visual Studio 2017简介 02. Visual Studio 2017下载 03. Visual Studio 2017安装 04. 软件测试 01 ...
- Visual Studio Code预览版Ver 0.3.0试用体验
当你开始阅读这篇文章时,请先不要把Visual Studio Code和.net.Windows联想到一起,因为VS Code是一个跨平台,支持30多种语言的开箱代码编辑器.不管你是.Net.Java ...
- 直接拿来用!Visual Studio 扩展工具利用 AI 强化你的代码
开发者如何利用人工智能强化代码?现在,Visual Studio IntelliCode 就能简单实现!下面来详细了解下具体如何操作. 作者 | Dirk Strauss 译者 | 弯月,责编 | 郭 ...
- linux - Visual Studio Code 的安装与卸载
1.Visual Studio Code简介 1.1.什么是Visual Studio Code? Visual Studio Code是微软推出的一个运行于 Mac OS X.Windows和 L ...
最新文章
- Pytorch:深度学习中pytorch/torchvision版本和CUDA版本最正确版本匹配、对应版本安装之详细攻略
- Java多线程(二):Callable和FutureTask结合使用获取返回值
- 程序员过关斩将--要想获取我的用户信息,就得按照规矩来
- iptables filter表案例/iptables nat表应用
- oracle循环不是a就取b,oracle数据库试题的.doc
- Ubuntu Linux服务器安装JDK8
- 这就是程序员被大厂偏爱的实力!
- Linux下查看CPU型号,内存大小,硬盘空间,进程等的命令(详解)
- 支付宝”向他付款”,定额付款收款链接生成
- filezilla linux 乱码,解决FileZilla Server搭建FTP中文乱码问题
- 单片机控制SIM900A型GSM模块发送数字短信(附源码)
- 在quartus II15.0中调用Modelsim进行时序仿真时出现Rerun the EDA Netlist Writer的原因
- android 2k屏分辨率是多少,5.5英寸2K分辨率2.5D屏幕
- 【原创】C#玩高频数字彩快3的一点体会
- redis的键值中出现\xac\xed\x00\x05t\x00\这些的乱码问题
- 教你如何与领导打交道
- windows局域网传输文件
- 有趣的23000----整理(12)P词根
- obj-y +=和obj-y :=的区别
- 2020年投资理财计划 | 新股申购
热门文章
- wordpress.org手动安装主题
- Error: Already running on PID 31356 (or pid file 'log/gunicorn.pid' is stale)
- spark广播变量的使用(转)
- 3分钟搞懂LSI原理
- mysql导出数据到本地_mysql怎么导出数据到本地文件
- python如何调用日期函数_当前时间等于另一个时间时如何使用函数:Python
- m40型工业机器人_工业机器人4大控制方式,你知道几种?
- 【Maven】CentOS7使用Nexus3搭建maven私服
- 编译安装C源码程序程序
- POJ 3225 线段树+lazy标记