Roslyn项目系统简介

发布15年后,Microsoft终于开始替换Visual Studio中基于COM的C#和Visual Basic项目系统。Microsoft谈及很多有必要放弃目前所用系统的原因:

  • 原生且基于COM

  • 单线程并与UI线程绑定

  • 难以通过和(不同用途的)子类型类扩展到聚合之外

  • 与Visual Studio紧密绑定

新增的C#和Visual Basic项目系统的主要目标为:

  • 可托管且基于托管接口

  • 支持多线程,可扩展,响应性更好

  • 可通过Managed Extensibility Framework(MEF)和不同组合方式轻松扩展。包含第三方在内的多方可对同一个项目系统做出自己的贡献

  • 可托管在Visual Studio之外

为实现这些特性,新系统的代码基使用VB和C#共同编写而来。

“项目系统”是什么?

根据Roslyn项目系统网站的介绍,

项目系统是指介于磁盘上的项目文件(例如.csproj和.vbproj)以及Visual Studio的各种功能(包括但不限于解决方案浏览器、设计器、调试器、语言服务、构建和部署)之间的一层组件,对于项目文件中所包含文件执行的几乎所有操作都是通过项目系统实现的。

同时需要注意,项目系统并不是构建系统。虽然项目系统需要与构建系统(例如MSBuild)进行通信,但项目系统的角色处在IDE和项目文件之间。(如果一切顺利,也可以位于第三方工具和项目文件之间。)

为何使用Visual Basic?

在如此新的项目系统中使用Visual Basic的原因仅仅在于,Visual Basic是现成的。虽然项目系统原本使用C++编写的内核已经改为使用C#重写,但“Visual Studio 2005的VB团队已在2003/2004年前后使用VB编写了应用程序设计器、属性页面、资源编辑器,以及设置设计器”(来源)。直接移植这些代码即可,完全没必要从头开始重写。

通用项目系统会如何处理?

通用项目系统(Common Project System)依然存在,Roslyn项目系统将在此基础之上运行。

也许你对这个概念还不熟悉,通用项目系统是在去年夏天伴随项目系统扩展预览版一起公布的。该系统的目标在于让开发者能够更方便地在Visual Studio中创建新的项目类型,从媒体公告中可知,

我们非常高兴且激动地宣布,项目系统扩展预览版已发布。借助这个系统,开发者可以定义新的项目类型并以此为基础开发扩展,借此对用户体验进行定制,或只需要少量代码即可在几分钟内增加新的功能。以往需要编写超过十万行代码才能创建或维护整个项目系统(通常要基于MPFproj创建分支)的日子一去不复返,现在开发者可以通过Visual Studio内建的通用项目系统(CPS)直接进行开发工作,该系统已在C++、JavaScript,以及ASP.NET 5中广泛运用。你可以通过下面这个视频短片进一步了解这个系统。

另外需要注意的是,MPFproj主分支更新后,每个项目类型都需要将改动合并到自己项目类型对应的分支中。可以想象,对于缺乏足够维护预算的人来说,从长期角度来看这算不上一种可行的解决方案。也正是因此,在其他IDE中无法使用种类如此丰富的项目类型。

原文地址:http://www.infoq.com/cn/news/2016/06/Roslyn-Project-System


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fastdfs 集群 java_FastDFS集群部署(转载 写的比较好)

之前介绍过关于FastDFS单机部署,详见博文:FastDFSNginx(单点部署)事例下面来玩下FastDFS集群部署,实现高可用(HA)服务器规划:跟踪服务器1【主机】(Tracker Server):192.100.139.121跟踪服务器2【备机】(Tracker Server…

简析.NET Core 以及与 .NET Framework的关系

至2002微软公司推出.NET平台已近15年,在互联网快速迭代的浪潮中,许多语言已被淘汰,同时也有更多新的语言涌现,但 .Net 依然坚挺的站在系统开发平台的一线阵营中,并且随着.NET Core 即将到来(2016年6月27日)的正式版&am…

Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator

转载自 Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator功能简介:LongAdder是jdk1.8提供的累加器,基于Striped64实现。它常用于状态采集、统计等场景。AtomicLong也可以用于这种场景,但在线程竞争激烈的情况下,Long…

mysql 密码hash算法_如何用hash创建一个mySQL用户(‘sha256’,$salt.$password)?

我肯定错过了什么.我想为select-only事务设置数据库用户帐户,但mysql不允许我在创建用户帐户时选择密码的哈希方法.这失败了:GRANT SELECT ON myDB.* TO selectuserlocalhostIDENTIFIED BY hash(sha256, salted-myfakelongrandompasswordstring);错误1064(42000)&am…

为什么微软逐步转变为开源公司

微软目前拥有自己的 BSD Unix 操作系统,支持 Ubuntu 作为 Windows 10 的一个子系统,最近又将 Xamarin 软件开发工具包开源,所有这些意味着微软已不再是比尔盖茨和史蒂夫鲍尔默的微软了。 我知道这很难令人相信,但微软确实正大步走…

Jdk1.8 JUC源码增量解析(1)-atomic-Striped64

转载自 Jdk1.8 JUC源码增量解析(1)-atomic-Striped64功能简介:Striped64是jdk1.8提供的用于支持如Long累加器,Double累加器这样机制的基础类。Striped64的设计核心思路就是通过内部的分散计算来避免竞争(比如多线程CAS操作时的竞争)。Striped64内部包含…

java内部类选择题_java内部类详解(附相关面试题)

说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。一.内部类基础在Java中&am…

开源,新的平台之战

近日,OpenDaylight项目的执行总监Neela Jacques在文章《开源的转变:一种新的平台战争》 中提到:开源已经成为软件公司业务战略的关键,是一种新的平台之战。 多年来,开源软件似乎处于技术产业的边缘。而如今&#xff0c…

java下载图片到手机相册_Unity保存图片到Android手机且更新相册

Android 保存图片到设备前言:在许多的应用或游戏中,大多都有保存图片或者截图等等的功能,这篇文档我们的目的是通过 Unity 保存图片,并且调用 Andorid 中的更新相册的原生方法.流程步骤:编写更新相册的 Android 原生接口 -> Unity 编写保存图片逻辑以及调用更新相册 Android…

如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

转载自 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例 wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中…

.NET Core 使用Dapper 操作MySQL

.NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使用Dapper。 目前官方没有出.NET Core MySQL 驱动,但是已经有第三方进行改动封装出.NET Core MySQL Connector 预览版。 Dapper 也已经出了 .NET Core 预览版。 Dapper dot net 是一个轻量型的ORM&a…

Angular 2与TypeScript概览

迄今为止,在创建Web应用方面,AngularJS是当前最为流行的JavaScript框架。如今,Angular 2和TypeScript通过一种非常类似于Java 8的语法,使真正面向对象的Web开发成为了主流。 据Google的工程主管Brad Green介绍,有130万…

正确使用 Volatile 变量

转载自 Java 理论与实践 - 正确使用 Volatile 变量 - volatile 变量使用指南Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少&#xf…

java龟兔赛跑设计思路_JAVA程序设计(09)-----面对对象设计初级应用 龟兔赛跑

1.乌龟和兔子共有属性和方法 做成父类 避免重复代码package com.lovo;/*** 类: 动物* author Abe* 属性: 名字 步距 总距离 睡觉的日子*/public class Animal {protected String name;protected int step;protected int distance;protected int sleepDay…

16年国庆假期期间兼职所悟

2016年9月25日,学校放假了!!! 学校放假11天,10月7号才开学,除了晚上上个夜班之外别的时间都在闲着,这么大的自己感觉闲着真不是滋味,于是开始疯狂的在58上找工作,心里想…

python flask项目过程_Python 开发过程遇到的问题

另一方面,也是因为时间原因,没有事先系统了解 python 的具体内容,所以开发过程中基本都是拿 java 的东西往 python 里面套。比如:某个功能用 java 的 ArrayList 可以解决,那 python 中有没有类似的东西呢?j…

Java 中的双重检查(Double-Check)

转载自 Java 中的双重检查(Double-Check) 在 Effecitve Java 一书的第 48 条中提到了双重检查模式,并指出这种模式在 Java 中通常并不适用。该模式的结构如下所示: public Resource getResource() { if (resource null) { …

使用 Autofac 进行依赖注入

先说下为什么翻译这篇文章,既定的方向是架构,然后为了学习架构就去学习一些架构模式、设计思想。 突然有一天发现依赖注入这种技能。为了使得架构可测试、易维护、可扩展,需要架构设计为松耦合类型,简单的说也就是解耦。为了解耦前…

组合的示例代码 java_java实现Composite组合模式的实例代码

//20210121写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现组合模式组合模式核心思想类似文件夹的概念,构件树形结构,树形有叶子结点和文件夹结…

Java中的ThreadPoolExecutor类

转载自 Java中的ThreadPoolExecutor类在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了&…