.NET运行时,C#语言,编译器,visual studio的相互依赖性

时间:2015-12-10 18:17:10

标签: c# .net roslyn

我想使用新的C#6语言功能。 https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6

public class Foo {
  public string ToolTip { get; set; } = "This is my toolip";
}

为此,我已将所有解决方案升级为VS2015解决方案。

我正在开发一个针对.NET4的MVC4项目。

这编译得很好但是无法在我们的构建服务器上构建,这使我完全怀疑所有部分是如何组合在一起推出的。

在我看来,新的语言功能需要使用新的编译器(Roslyn?预先安装VS2015?)。

编译器会将我的代码转换为IL,并由运行时执行。因此,只要编译器支持我所定位的.NET运行时版本,我的前端Web服务器就不需要升级,以便我们利用C#6功能。

让我暂停的一点是JIT编译的代码,例如cshtml文件。

我可以在哪里阅读有关这些依赖关系的更多信息?

2 个答案:

答案 0 :(得分:2)

C#语言

  • C#是一种高级语言,由编译器
  • 转换为MSIL
  • MSIL与平台/语言无关:C#,VBasic,F#都编译为同一个MSIL
  • MSIL由.NET CLR执行
  • C#语言版本独立于.NET CLR,因此您无需在运行代码的服务器上更新CLR
  • 在项目文件中,选择要定位的.NET框架的版本,该版本确定编译器发出的MSIL,以便它可以在目标服务器上运行
  • 将来某些语言功能可能与旧版本的.NET Framework不兼容,但在这种情况下,您的项目将无法在编译时构建
  • 新语言功能仅适用于编译器的更新
  • ASP.NET的独特之处在于,在开发过程中会发生编译,但也会对视图文件进行运行时编译。

编译器

  • 从2015年开始,Roslyn是新的C#编译器
  • 在Roslyn之前,csc.exe是主编译器,它随.NET Framework一起提供
  • ASP.NET运行库将动态编译视图。要使其使用Roslyn,请在MVC项目中安装CodeDOM Provider NuGet Package
  • Roslyn on GitHub

的MSBuild

  • 围绕构建/部署.NET应用程序的工具套件
  • 利用特定的编译器;我没有看到强制MSBuild使用旧编译器的方法
  • 用于在C:/Windows/Microsoft.NET/Framework/v3.5/MSBuild.exe下使用.NET框架,利用csc.exe编译器
  • 从2013年开始,使用Roslyn编译器在C:/ Program Files(x86)/MSBuild/14.0/MSBuild.exe下started shipping with Visual Studio Releases
  • MSBuild on GitHub

Visual Studio 2015

  • C#和.NET应用程序的主代码编辑环境
  • 安装.NET Framework 4.6.1
  • 安装MSBuild 14.0
  • 利用MSBuild.exe编译您的C#代码
  • 立即允许在编辑器中编写C#6代码

.NET Framework / CLR

  • .NET Framework是公共语言运行时(CLR) + managed libraries and tools
  • CLR始终附带.NET Framework主要版本
  • 针对不同版本的.NET Framework,您可以访问新的/修改过的库,以及在新CLR中执行MSIL代码时的性能改进
  • 注意:ASP.NET和ASP.NET MVC是.NET Framework的一部分,因此您
  • Current Versions

在MVC中使用C#6语言功能:

  • 安装最新的Visual Studio(它使用最新版本的MSBuild,利用最新的编译器(Roslyn)将C#代码转换为MSIL)
  • 通过NuGet将新的Roslyn CodeDOMProvider添加到您的项目中(这将作为引用的dll部署到您的Web服务器,并且是ASP.NET运行时将用于动态编译视图的内容
  • 通过在那里安装最新的Visual Studio,将构建服务器更新为拥有最新版本的MSBuild(和编译器)
  • See MSDN for more details

答案 1 :(得分:0)

构建服务器失败的原因是,它可能使用了错误的ms构建版本。

罗斯林没什么特别的。它只是一组用于处理代码的库(解析,编译等)。在vs2015和相应的msbuild中,旧的C#编译器被更新的 - roslyn替换。

如果你想了解更多,那么有很好的复数课程https://www.pluralsight.com/courses/dotnet-compiler-platform-introduction

在构建服务器时,它取决于您使用的构建服务器。通常,您必须安装vs2015并指示它使用新的msbuild。您可以针对不同的运行时编译C#6。

对于tfs2013,请指定版本并更改构建模板TFS 2013 building .NET 4.6 / C# 6.0