本文主要阐述一些Visual Studio开发下需要知道的少部分且比较实用的功能,也是很多人忽略的部分。一些不常用而且冷门的功能不在本文范围,当然本文的尾巴【.Net必知系列】纯属意淫,如有雷同,基情四射。。
- WEB项目版本发布时 Web.config 中 Web.Release.config 和 Web.Debug.config 的使用。
- 项目属性下【生成事件】使用。
- 快速分析未知架构和类调用结构的方式(VS2010/2012)。
有时候我们开发与发布Web应用程序时Web.Config中的配置可能不一样,比如数据库连接字符串。那在发布时想自动替换Web.config文件的内容如何办呢?特别是项目开发到后期配置节点越来越多,共同部分和差异部分经常使用<!--注释--> 来进行节点的切换,这样是不是觉得太麻烦了,现在我们就来解决这个问题,当然这只是演示比较常用的一种方式,至于其他方式不做言表。
大家看见的这个就是所说的3个经常看见但是下面2个一般没有人使用额配置文件, Web.Release/Debug.config内容描叙(默认新建项目会自动生成)
下面是Web.Release.config 和 Web.Debug.config 的配置文件
<?xml version="1.0" encoding="utf-8"?> <!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 --> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<!--
In the example below, the "SetAttributes" transform will change the value of
"connectionString" to use "ReleaseSQLServer" only when the "Match" locator
finds an attribute "name" that has a value of "MyDB".
-->
<connectionStrings>
<add name="AppConnection"
connectionString="这里填写【测试环境连接字符串】或【正式环境的字符串】分别写在Release.config,Debug.config中"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings> </configuration>
下面是Web.config 的配置文件
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<connectionStrings>
<add name="AppConnection" connectionString="默认连接字符串"/>
<add name="TestCommon" connectionString="公共使用的连接字符串"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
</configuration>
注意,我在Web.config的connectionStrings节点下 下建立2个 子节点用来比较发布后的效果,当发布后就会变成
下面是发布 后Web.config 的配置文件
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<connectionStrings>//注意这里的字符串变了,变成了release配置文件中的字符串
<add name="AppConnection" connectionString="发布环境连接字符串"/>
<add name="TestCommon" connectionString="公共使用的连接字符串"/>
</connectionStrings>
<system.web>
<compilation targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
</configuration>
这样就自动把替换Web.config中需要替换的节点按照设定的模式进行处理了,下面具体看一下描叙语言吧。
这里面2句重要的语句是 xdt:Transform="SetAttributes" xdt:Locator="Match(name)" 这2个配置属性意思是,把Web.config中connectionStrings对应name为AppConnection的节点属性替换。
这里的语法来源于xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" 命名空间,那2个分开的文件中都需要导入才能使用。
简单讲一下常用配置属性
1 :locator属性
(1)Match;
这里你需要就是在你直接匹配的属性名。
<connectionStrings>
<add name="Northwind" connectionString="connection string detail"
providerName="System.Data.SqlClient"
xdt:Transform="Replace"
xdt:Locator="Match(name)" />
</connectionStrings>
Engine会再你的Web.config中找到匹配name为Norhwind的就用上面的配置文件图替换。
(2)Condition 基于XPath,在Locator中应用有逻辑性的判断表达式。
<connectionStrings>
<add name="Northwind"
connectionString="connection string detail"
providerName="System.Data.SqlClient"
xdt:Transform="Replace"
xdt:Locator="Condition(@name=’Northwind or @providerName=' System.Data.SqlClient')" />
</connectionStrings>
上面就是Name属性匹配‘Norhwind’的或providerName匹配System.Data.SqlClient的配置文件节点都会被替换。
2: Transform 属性
(1) Replace 表示所有匹配的节点都是替换
<assemblies xdt:Transform="Replace">
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
其实这里描述文件时web.release.config,将要替换的文件时Web.config . (2) Remove 删除第一匹配的元素。
<assemblies xdt:Transform="Remove">
</assemblies>
(2)RemoveAll
<connectionStrings>
<add xdt:Transform="RemoveAll"/>
</connectionStrings>
(3)Insert
插入从父节点中插入,(authorization中插入<deny users="*" />)
<authorization>
<deny users="*" xdt:Transform="Insert"/>
</authorization>
(4)SetAttributes
<compilation batch="false"
xdt:Transform="SetAttributes(batch)">
</compilation>
本功能和技巧大概就这里,具体详细的配置参考下面微软官方文档
https://msdn.microsoft.com/zh-cn/library/dd465326(v=vs.100).aspx
什么是生成事件呢,可以使用生成事件指定在生成开始之前或生成完成之后运行的命令。只有当生成成功到达生成过程中的这些时间点时,才执行生成事件。浅显易懂的说就是项目编译完毕后,你需要额外做些什么事情,这个在C#代码里面是做不了的,这样生成事件就派上用场了。
看到这个图是不是很熟悉呢,但具体用到过的同学有多少^_^。
生成事件分为【生成前】和【生成后】执行的命令函数,后期生成事件又可以指定
3种编译情况选项
常见生成事件举例:生成后DLL复制,转移
例子一:
我有一个解决方案【NetToolStudio】这个是我一个插件式项目,由于【NTS.SqlServer】该程序集只是一个插件实现的子集,所以不依赖主框架,不会自动复制到BIN目录,更不会帮我复制到【DBProvider】放置插件文件夹,故需要将NTS.SqlServer生成的dll拷贝到【DBProvider】目录。但是每次手动拷贝很麻烦,于是乎生成事件就派上用场了,生成事件里的命令行是支持dos命令的,在后期生成事件命令行中输入 “copy或xcopy [源文件全路径] 拷贝到的路径”。
xcopy /r /y $(TargetPath) $(SolutionDir)NTS\DBProvider\
这样就产生了这样一句dos命令
当然也可以想如图上的写多条命令语句。
大家看见里面有$(TargetPath) $(SolutionDir)这些是些什么啊?打开生成事件中的宏如下图所示。
看打了吧,这样我们可以拿到程序集和解决方案给我的一些宏命令,至于什么是宏命令,这里不做解释,可以使用就好。
本功能大概就这里,具体详细的配置参考下面微软官方文档
https://msdn.microsoft.com/zh-cn/library/ke5z92ks(v=vs.100).aspx
分享几个好用的批处理,也是常用哟。
查找当前执行目录的文件并复制.rar 【该批处理的功能可以把当前目录所有的DLL复制到当前的TEMP文件夹中】
DeleteBin.rar 【看名字就知道是删除所有VS生成的BIN目录和OBJ目录,打包时复制带走的好帮手】
大家有时候看开源代码和新入职一家公司看以前同仁写的代码是不是很纠结,没有文档,没有架构图,没有人问,但是项目已经维护了N年了,看起来好恶心啊,现在有2种VS自带的功能来快速浏览和建立起自己的逻辑思维图。
是的,就是我们在代码编辑窗体中右键后出现的,这2种代码视图和调用层次结构图是快速读懂别人代码的一种捷径。
1.VS 2010引进了一个新的“View Call Hierarchy (查看调用的层次结构)”的特性,允许你快速地发现你的代码库中的某个特定方法或属性是在何处被调用的,允许你快速地遍历(traverse)整个代码库的调用树形图(而不必运行或调试方案)。
2.上面的代码视图,微软叫做【Code Map 理解复杂代码】
首先来看看【查看调用的层次结构】
方法名称上右键后点击-》查看调用的层次结构,稍等几秒就会出现如下图
然后点击里面的【UpdateKeyWordToFile】节点,可以继续展开。
看是不是很爽,具体怎么看,请看红色标识,赶紧去尝试一下吧,具体还有很多功能,有很多惊喜。
再来看看代码(类)引用图【Code Map 理解复杂代码】
【类】或者【方法】名称上右键后点击-》在代码上查找所有引用,稍等几秒(看机器性能)就会出现如下图:
右键方法
右键类
如果大家觉得它仅仅只是看看而已就错了,当我们debug的时候也能显示当先调用方法的具体位置和层次,能看清前后的调用顺序。
当我打了断点后,右图也会显示一个断点图标,标识运行的具体位置,如果你的index里面有很多方法,都可以右键添加到右边的MAP视图中,根据自己的喜好来调整数量和层次。
具体如何操作赶紧亲自体验一下吧,本来想写详细点的教程的,但是发现看视频可能更快,提供一个微软的官方视频:
本次的一些VS需要知道的功能和技巧就写到这里,下次如果有好的继续分享。
Visual Studio (VS IDE) 你必须知道的功能和技巧 - 【.Net必知系列】的更多相关文章
-
Visual.Studio.2013.IDE+visual.studio.15.preview5 编译器
硬盘版Visual.Studio.2013.IDE + visual.studio.15.preview5 编译器 使用前注意以下事项: 1.右键-管理员权限安装,VS15补丁.exe,补丁是VS15 ...
-
Visual Studio Code IDE + Docker实现PHP Xdebug调试
一.Docker中安装配置Xdebug 通过phpinfo()输出当前安装的PHP版本信息,将信息拷贝到https://xdebug.org/wizard.php相应输入框中,系统会自动检测并推荐合适 ...
-
通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率
原文:通过设置启用 Visual Studio 默认关闭的大量强大的功能提升开发效率 使用 Visual Studio 开发 C#/.NET 应用程序,以前有 ReSharper 来不足其各项功能短板 ...
-
Visual Studio 2022 预览版3 最新功能解说
我们很高兴地宣布Visual Studio 2022 的第三个预览版问世啦!预览版3 提供了更多关于个人和团队生产力.现代开发和持续创新等主题的新功能.在本文中,我们将重点介绍Visual Studi ...
-
Visual Studio 2017 IDE之xml过大报错
XML处理时遇到这个错误 在powershell中输入 $vsWherePath = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual ...
-
Visual Studio Code IDE开发插件配置
[PHP通用集成环境] PHP Extension Pack #PHP拓展包,PHP开发最重要的拓展 PHP Intelephense #PHP自动补全工具 PHP IntelliSense #PHP ...
-
Visual Studio Code 使用 Typings 实现智能提示功能
前言 我们知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也有一些简单的提示,但这是通过代码片段提供的.功能上远不能和IDE相比.不过最近兴起的文本编辑器的新锐 Visual Studio ...
-
Visual Studio 2013开启JavaScript的智能提示功能
在前一次的发布的时候,我们共享了Visual Studio 2013中Windows Azure移动服务的集成和功能.其中包含了移动服务表脚本的编辑能力的介绍.这一次的发布,我们将描述在Visual ...
-
【VS开发】visual studio 2015的NuGet Manager解决方案管理功能
NuGet的官方说明是:NuGet是一款Visual Studio的扩展,它可以简单的安装.升级开源库和工具. 官网地址:http://www.nuget.org/ 官网最醒目的位置就是下载链接,安装 ...
随机推荐
-
js中特有语句-with
<script type="text/javascript"> /* *为了简化对象调用内容的书写. *可以用js中的特有语句with来完成. *格式 *with{ * ...
-
在C#中使用C++编写的类
现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额.因此很多以前搞VC++开发的人都转向用更强大的VS.Net.在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类 ...
-
jQuery给同一个元素两个点击事件
$(".course-form .course-start img").each(function(i) { $(this).toggle(function(){ $(this). ...
-
下载服务器dll文件并动态加载
1.新加一个类库 namespace ClassLibrary1 { public class Class1 { public int Add(int a, int b) { return a + b ...
-
C++中枚举定义运算符
由于枚举也是用户定义类型,所以是可以定义运算符, 如: enum Day {sun, mon, tue, wen, thu, fri, sat}; Day& operator++(Day&am ...
-
10 Easy Steps to a Complete Understanding of SQL
原文出处:http://tech.pro/tutorial/1555/10-easy-steps-to-a-complete-understanding-of-sql(已经失效,现在收集如下) Too ...
-
PHP json_encode 中文乱码
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 在编码过程中.经常会用到json_encode来处理中文.但是.出现一个问题.中文 ...
-
centos7/RHEL7最小化系统安装gnome图形界面
应用场景:对于比较熟悉linux系统的用户来说,全命令行系统可能来的比较简单明了高效,也存在某些情况下需要有像winodws下弹出对话框的情形需求,或者对于初识linux习惯windows界面的用户来 ...
-
paddle——docker实践
Docker image阅读:https://github.com/PaddlePaddle/book/blob/develop/README.cn.md docker run -d -p 8888: ...
-
【算法笔记】B1036 跟奥巴马一起编程
1036 跟奥巴马一起编程 (15 分) 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴 ...