欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在Visual Studio 2015中畅游C# 7.0编程体验

最编程 2024-02-09 22:36:31
...

昨天在 "C# 7 不能编译?" 一文的最后,我有提到不是一定要 Visual Studio 2017 才能使用 C# 7,只要 Microsoft.Net.Compilers 可以运行 (.NET 4.5.1 以上),就能使用 C# 7 快乐的写程序,有朋友响应说 Visual Studio 2015 上使用 C# 7 ,Microsoft.Net.Compilers 已经升级到 2.0,但却无法编译... (这个问题要解决有个但书)


以下的测试,是基于项目是使用 Visual Studio 2017 所建立的情形下才可以使用。
经过我的初步调查,这个差距是来自于 Microsoft.Common.props 这个文件,里面对编译工具选择方式的定义有差别,Visual Studio 2015 还是以 Microsoft Build Tools 为基础,但 Visual Studio 2017 起改为侦测项目目录下是否有存在 Build Tools (也就是 Microsoft.Net.Compilers 套件所安装的建造工具),因此用 Visual Studio 2015 开启 Visual Studio 2017 所建立的项目时,能成功建置 C# 7 语法的程序,但若是用 Visual Studio 2015 新增项目,会因为 Microsoft.Common.props 还是固定使用 Microsoft Build Tools 而无法编译 C# 7 的语法。

我使用的环境是 Visual Studio 2015 with Update 3,打开 Visual Studio 2017 所建的 Console Application 项目,并且在项目中安装 Microsoft.Net.Compilers 2.0.1,然后在程序中同时实践 System.ValueTuple 和 inline function,程序如下:

using System;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            var values = GetRandomValues();
            Console.WriteLine($"{values.x}, {values.y}");
            Console.ReadLine();
        }

        static (int x, int y) GetRandomValues()
        {
            return GetRandomValuesInner();

            (int x, int y) GetRandomValuesInner()
            {
                var rnd = new Random();

                return new ValueTuple(rnd.Next(), rnd.Next());
            }
        }
    }
}

不过在编写的时候,因为 Visual Studio 2015 的 IDE 并不知道 C# 7 的语法特性,所以会看到一堆毛毛虫。

但是编译却是可以过的,有趣吧。

而且还真的可以跑喔。

所以证实了 Visual Studio 不再管理编译器,只要是安装了 Microsoft.Net.Compilers 套件,Visual Studio 就会使用 Microsoft.Net.Compilers 里面的编译器,而不是用 .NET Framework 本身的。

至于 Visual Studio IDE 上的毛毛虫有没有解呢? 我做了简单的测试,安装 Microsoft.CodeAnalysis 套件 2.0,但仍然无法消除毛毛虫。

顶多只是提示中会显示 C# 7.0 language feature 的提示 (这个是有安装 Resharper 才会有的提示),不过这不影响编译。

本文仅就 Visual Studio 2015 测试,至于 Visual Studio 2013 或更早的版本能否运行我就不确定了,因为我也没有环境可测试。

注:一开始说的 Microsoft.Commons.prop 的改变,Visual Studio 2017 的版本比 Visual Studio 2015 的多了下列这一大段,赋与 Visual Studio 2017 的项目能使用 Microsoft.Net.Compilers 的建置工具编译。


  <_directorybuildpropsfile condition="'$(_DirectoryBuildPropsFile)' == ''">Directory.Build.props<_directorybuildpropsbasepath condition="'$(_DirectoryBuildPropsBasePath)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), '$(_DirectoryBuildPropsFile)'))$([System.IO.Path]::Combine('$(_DirectoryBuildPropsBasePath)', '$(_DirectoryBuildPropsFile)'))obj$(BaseIntermediateOutputPath)$(BaseIntermediateOutputPath)$([System.IO.Path]::Combine('$(MSBuildProjectDirectory)', '$(MSBuildProjectExtensionsPath)'))$(MSBuildProjectExtensionsPath)true

原文:大专栏  [C#] 在 Visual Studio 2015 使用 C# 7


原文地址:https://www.cnblogs.com/petewell/p/11490003.html