我对 MS 堆栈的所有部分如何组合在一起感到非常困惑。C# 版本、Visual Studio 版本、.NET 框架版本和 ASP.NET 版本(这与 .net 版本相同吗?)如何适合给定项目?
例如,如果我将 Visual Studio 2010 用于面向 .NET 框架 2 的项目,我如何知道我可以使用哪些 C# 或 ASP.NET 功能?
C# 版本控制您可以使用的语言功能;它独立于其他一切。(因为它只是编译器)
即使针对较旧的框架,您也可以使用(大多数)较新的语言功能。
但是,其中一些功能(例如,dynamic
NoPIA)依赖于特定 .Net Framework 版本中的功能。
.Net Framework 版本控制您可以使用 .Net 的哪些部分;在较新的版本(分别为 3.5 和 4.0)中引入了一些 .Net 功能(例如,LINQ 或 TPL)
更复杂的是,ASP.Net 在运行时调用 C# 编译器来编译 ASPX 或 Razor 视图(以及网站项目中的独立文件),因此在这种情况下,您不能使用比框架版本更新的语言功能。
C#版本是调用编译源代码的编译器版本,VS版本是Visual Studio IDE的版本,可能支持多个框架版本。框架的版本会影响可用的 .NET BCL(基类库)的版本。
因此,如果您以 2.0 框架为目标,如您的示例所示,则只能使用 2.0 框架中可用的 BCL 库。因此,您不能使用System.Linq
.
但是,由于 VS2010 使用 C# 4 编译器,您可以使用 C# 4 编译器功能,例如默认参数,并且仍然针对较旧的框架。
因此,当从 VS2010 构建时,它将在 2.0 框架下编译和运行,因为 C# 4 编译器在编译时处理默认参数:
class Program
{
public static void HelloWorld(string x = "Hi")
{
Console.WriteLine(x);
}
static void Main(string[] args)
{
HelloWorld();
HelloWorld("Buyah");
}
}
查看C# 的 Wikipedia 条目中的表格,它可以很好地概述不同版本的 C# 语言(和编译器),以及它们所依赖的 .NET 和 Visual Studio 版本。
请记住,Visual Studio 通常是向后兼容的,因此即使在 Visual Studio 2010 中,您也可以针对 .NET Framework 2.0 编写 C# 2.0 代码。
Visual Studio 版本控制您可以使用哪些 C# / .NET 版本;您不能使用 Visual Studio 2005 中的 .NET 4.0 功能编写 C#,因为 IDE 在 C# 版本之前发布。但是,您可以倒退,即从 VS 2010 开始以 .NET 2.0 为目标。
C# 相对于框架版本和 IDE 的版本如下,从 .NET / C# 2.0 和 VS 2005 开始:
对比 2005 | .NET 2.0 及更早版本 | C# 2.0 及更早版本
对比 2008 | .NET 3.5 及更早版本 | C# 3.0 及更早版本
对比 2010 | .NET 4.0 及更早版本 | C# 4.0 及更早版本
VS 11(测试版)| .NET 4.5 及更早版本 | C# 5.0 及更早版本
Visual Studio 是 IDE。它支持多个版本的 .Net,具体取决于您拥有的 VS 版本。VS2010 支持 .Net 2 和 .Net 4(不包括当前的 beta)
.Net 根据库的特性有自己的版本
C# 和 VB 独立于彼此和 .Net,有自己的版本号。VB 接替了经典的 VB,最后我检查了 11。C# 与 .Net 号码接近。当语言本身获得独立于库的新功能时,这些会发生变化。
ASP.Net 也有自己的版本,同样,基于不同的功能。
它们都是相互关联的,但并不相互依赖。通常,它们都会在 .net 上更新一个版本,但有时它们会在更新语言或框架之前向 ASP.Net 发布新功能。
一张桌子更适合这里,但这是我的答案:
语言:C# 1、.NET Frameworks 1.0、1.1、VS 2003
语言:C# 2、.NET Frameworks 2.0、VS 2005(添加的主要功能:泛型)
语言:C# 3、.NET Framework 3.0、3.5(实际上是基于2.0版本)、VS 2008(主要新增功能:LINQ(语言)、WCF、WPF、WF(技术)
语言:C# 4、.NET Framework 4.0、VS 2010(主要特性添加:动态类型)
顺便说一句:VS 2008、2010 可以从 2.0 版本开始针对 .NET Frameworks