Visual Studio下开发Node.js

Node.js Tools for Visual Studio

VS本来就是硕大无比,而NodeJs如此狂热,要是能在VS上直接开发不是很美的一件事吗?然而M$已经有这么一个组件了,他:

  • 组件完全开源。
  • 强大的智能补全,这源于VS自身的强大功能。
  • 调试功能。
  • 性能分析。
  • 包管理。
  • 支持Javascript相关框架语言(如:NodeJs、IO.js、TypeScript、JSON)以及HTML、CSS。

不过目前支持的VS版本比较有限:

  • Visual Studio Community 2015
  • Visual Studio Community 2013
  • Visual Studio 2013 Express for Web (requires Update 2 or later)
  • Visual Studio 2015 Professional or above
  • Visual Studio 2013 Professional or above (requires Update 2 or later)
  • Visual Studio 2012 Professional or above (requires Update 4)

创建Node.js项目

安装成功以后,我们可以直接新建Node.js项目:

新建nodejs项目

Node.js 的项目结构很清晰。

NTVS Project

npm包安装

NTVS是通过npm来管理包的,所以可以直接右击npm通过【Install New npm Packages】选择要安装的第三方组件。

强大智能代码提醒

如上图还有个强大的智能提醒,写起的Node.js代码是不是更方便,更不易出错,特别是还有示例,这一点比C#自身的提醒信息更丰富。

调试

NTVS Debugger

看到这图是不是可以秒杀好多IDE的JavaScript调试功能呢,也可以远程调试功能。

Node.js Interactive Window

也可以直接在VS中使用Node.js命令,通过【工具>Node.js Tool>Node.js Interactive Window】或【Ctrl + K, N】,打开Node.js交互窗口。

NTVS Debugger

参考

关于SQL Server数据库项目

什么是SQL Server数据库项目

可以直接在Visual Studio上创建数据库以及更新现有数据库的应用程序,可以对数据库进行版本控制,所采用的方式跟我们托管代码几乎一样。

团队成员可以能够签出文件,在独立的开发环境(或沙盒)中进行更改、生成和测试。

为了确保代码质量,还可以产生临时环境中特定的数据库版本完成和测试并部署到生产环境中。

所有这一切都在vs sql server database project项目中完成,甚至连开sql server managerent studio变得更少。

创建SQL Server数据库项目

在VS中可以找到SQL Server->SQL Server Database Project。

a1

项目属性可以调整我们部署的SQL Server版本。

a2

导入现有数据库。

右击项目,选择导入,有三种导入方式。

Data-tier Application:又叫DAC,这是SQL SERVER 2008 R2以上才有的,用于数据库管理。原则上DAC和SQL Server数据库项目是搭配使用,但我这里是针对后者。

Database:可以选择现有数据库,并自动生成所有项到项目中。

Script:即*.sql脚本。

完成导入后会看到一个完整的目录结构,包括:表、存储过程、视图。我们看到的全是一些*.sql文件。

发布SQL Server数据库项目

一但我们创建好表等后,我们可以直接发布,如同我们发布Web项目一般。

a3

指定相应不同的目标数据库,就可以部署到相应的环境当中。并且我们可以将这些发布配置保存到项目中,以后直接双击项目的发布文件可以直接发布。

每个*.sql文件都有对应的生成动作,包括:
1.None:不参与。
2.Build:参与编译。
3.PostDeploy:发布后执行。
4.PreDeploy:发布前执行。

有了这些我们可以做更多的事情,比如:数据库升级或数据初始化时的一些修正。

VS中的sql文件

  • 任意一个sql文件都可以直接右击执行、执行调试。
  • 重命名变量,这对重构时非常有用。
  • 插入代码片断,提高开发效率。

结构比较

右击项目可以创建一个结构比较,找出差异:

a4

以上。

Visual Studio代码片断

代码片断是VS中非常重要的功能,我们时刻无意的总在使用。比如:tryf (tab键),自动生成如下代码:

        try
        {               
        }
        finally
        {
        }

这样的快捷方式非常多,默认我们可以在 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC#\Snippets\1033\Visual C# 找到很多VS自带的代码片断。

使用方式

在VS中,可以使用 ctrl+b,ctrl+k 打开 Code Snippets Manager,这里除了系统以外,我们还可以自定义导入属于自己的片断。

在大部分项目中,极大部分页面几乎都是重复性结构,所以我们可以针对不同项目做一些代码片断,这无疑对提高开发效率非常有帮助,而且还可以让代码风格更舒服。

实则每个片断都是独立一个XML文件存储,并以 *.snippet 为后缀,导入VS中,就可以直接在代码中使用。

单例模式的代码片断

以下是我常用单例模式的代码片断,我尽可能直接在XML文件中声明相当元素的说明。

<?xml version="1.0" encoding="utf-8"?>
<!--xmlns:可以修改2013为2005、2008等根据不同VS版本来选择。-->
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2013/CodeSnippet">
  <CodeSnippet Format="1.0.0">
    <Header>
      <Title>单例模式</Title>
      <Description>创建一个完整的单例模式。</Description>
      <Author></Author>
      <HelpUrl></HelpUrl>
      <!--插入代码段的方式,分别:SurroundsWith:一段代码、Expansion:光标处、Refactoring-->
      <SnippetTypes>
        <SnippetType>Expansion</SnippetType>
      </SnippetTypes>
      <!--用于VS使用,用于搜索片断代码。-->
      <Keywords>
        <Keyword>Create Singleton</Keyword>
        <Keyword>Singleton Create</Keyword>
      </Keywords>
      <!--插入代码片断的快捷方式,只能包含字母数字字符、连字符 (-) 和下划线 (_)。-->
      <Shortcut>context</Shortcut>
    </Header>
    <Snippet>
      <!--引用分组,有关代码段所需的程序集引用的信息。-->
      <References>
        <Reference>
          <Assembly>System.Web.Mvc.dll</Assembly>
        </Reference>
      </References>
      <!--指定 IntelliSense 代码片段使用的导入的命名空间。-->
      <Imports>
        <Import>
          <Namespace>System.Web.Mvc</Namespace>
        </Import>
      </Imports>
      <!--代码片段组成部分的文本和对象,分为Object和Literal两种,结构差不多一样,Object多一个Type-->
      <Declarations>
        <!--Editable:是否可编辑-->
        <Object Editable="true">
          <!--文本唯一标识符,除了$end$保留值;用于插入代码后光标位置。-->
          <ID>class_name</ID>
          <!--指定对象类型-->
          <Type />
          <ToolTip>类名</ToolTip>
          <Default>class_name</Default>
          <!--指当VS收到焦点时要执行的函数,见后面的详细。-->
          <Function>ClassName()</Function>
        </Object>
        <Literal Editable="true">
          <ID>instance_class</ID>
          <ToolTip />
          <Default>instance_class</Default>
          <Function />
        </Literal>
      </Declarations>
      <!--代码容器,Kind指定代码类型,包括:method body、method decl、type decl、file 和 any,Delimiter:代码中文本或对象的分隔符。-->
      <Code Language="csharp" Kind="" Delimiter="$">
        <![CDATA[private static readonly object _locker = new object();
private static $instance_class$ instance;
private $class_name$() { }
public static $instance_class$ Instance
{
    get 
    {
        if (instance == null) 
        {
            lock (_locker) 
            {
                if (instance == null)
                {
                    instance = new $instance_class$();
                }
            }
        }
        return instance;
    }
}]]>
      </Code>
    </Snippet>
  </CodeSnippet>
</CodeSnippets>

关于Function元素

MSDN中解释:

此文本指定当文本或对象字段在 Visual Studio 中获得焦点时要执行的函数。

目前只有三个函数,分别是:

  1. GenerateSwitchCases( EnumerationLiteral ) 用于生成 switch 语句和一组 switch,这里的 EnumerationLiteral 等同Object和Literal的唯一标识符。
    2.ClassName() 返回当前所在类的类名。
    3.SimpleTypeName( TypeName ) 缩减代码容器的类型名称。

编辑Snippet工具

Snippet Editor 一个开源编辑Snippet工具,大大简化编写XML错误率,已经有完整的文档,不再赘述。

附录

以上。

© 2017 卡片机色彩 沪ICP备13032872号-3

Theme by cipchk

to top