当前位置: 首页 > 知识库问答 >
问题:

如何在Visual Studio 2017中使用C# 8?

居和顺
2023-03-14

我想在Visual Studio 2017中使用C#8.0(尤其是范围和不可为空的引用类型)。可能吗?

共有3个答案

彭阳朔
2023-03-14

您可以在vs2017中使用Microsoft. Net. Compilers. Toolset而不是Microsoft. Net. Comp的

该软件包旨在替代Microsoft。net Compilers(这是一个仅适用于Windows的软件包)和Microsoft.NETCore.Compilers。这些软件包现在已被弃用,将来会被删除。

该包需要MSBuild 15.0和。NET Destkop 4.7.2或。网络核心2.1

软件包版本:

与vs2019相比,包版本映射了c#8支持的能力。

  • 版本 3.0 包含 C# 8.0(Visual Studio 2019 版本 16.0)的预览版,但 2.11 用于预览版1。
  • 版本 3.1 包含 C# 8.0(Visual Studio 2019 版本 16.1)的预览
  • 版 版本
  • 3.2 包含 C# 8.0(Visual Studio 2019 版本 16.2)的预览版
  • 版本 3.3
  • 包括 C# 8.0(Visual Studio 2019 版本 16.3,.NET Core 3.0)

如何使用

将这些行添加到. csproj

xml prettyprint-override"> <PropertyGroup>
     //....
    <LangVersion>8.0</LangVersion>    
    <Nullable>enable</Nullable> <!-- to support nullable reference type -->
  </PropertyGroup>

<ItemGroup>   
    <PackageReference Include="Microsoft.Net.Compilers.Toolset" Version="3.3.1" PrivateAssets="All" />
  </ItemGroup>
龚凌
2023-03-14

补充series0ne关于主要发布版本的评论:新的VS通常会发布新的C#版本,这是事实。然而,在过去的经验中,有可能将以前版本的VS升级到编译器较新版本的C#代码,主要是通过升级“Microsoft。Net编译器的Nuget包。你可以参考这篇文章获得更多信息。如何在Visual Studio 2015中使用c#7?

广乐邦
2023-03-14

展望未来,微软希望将C#语言版本与框架版本比过去更紧密地联系在一起。他们真的只希望您将C#8与. NET Core 3. x和. NET Standard 2.1项目一起使用,这意味着使用Visual Studio 2019。我对C#8是否支持的回答。NET Framework?有所有血淋淋的细节。

但是,如果您真的愿意,您现在可以在Visual Studio 2017中使用C#8,方法是使用将C#7引入Visual Studio 2015的相同技巧:将最新版本的Microsoft. Net. Comp的Nuget包安装到项目中。它可以工作,但是VS 2017当然不知道C#8语法,所以它看起来不太漂亮。这是一个屏幕截图,显示VS 2017能够使用可空引用类型和静态本地方法(两者都是C#8功能)编译一个小型测试库:

这是。csproj和代码如果你想试试:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net452</TargetFrameworks>
    <LangVersion>8.0</LangVersion>    
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Net.Compilers" Version="3.3.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

-

using System;

namespace CSharp8Test
{
    public class Class1
    {
        public string? NullableString { get; } = "Test";

        public static void Test()
        {
            Console.WriteLine(Test2());
            static int Test2() => 5;
        }
    }
}
 类似资料:
  • 问题内容: 在新的Go语言中,如何调用C 代码?换句话说,如何包装我的C 类并在Go中使用它们? 问题答案: 更新: 我已经成功地将一个小型测试C ++类与Go链接在一起 如果您使用C接口包装C ++代码,则应该可以使用cgo调用您的库(请参阅中的gmp示例)。 我不确定C ++中的类概念是否真的可以在Go中表达,因为它没有继承。 这是一个例子: 我有一个C ++类定义为: 我想在Go中使用。我将

  • 问题内容: 我已经用C ++实现了一个类。我想将其与Python一起使用。 请提出逐步方法,并详细说明每个步骤。 这样的东西 现在,在Python中 请提出建议。我该怎么办?注意:我想知道手动的方法。我不希望任何第三方库依赖。 问题答案: 查看Boost.Python。这是一个用C ++编写python模块的库。 还要研究SWIG,它也可以处理其他脚本语言的模块。我过去曾使用它来为我的课程编写模块

  • 我试图在MongoDB中保存ImmutableArray(System.Collections.Immutable)。 我试过MongoDB。Immutable,但它仅限于Immutable包的旧版本,不支持ImmutableArray。 我试图创建一个自定义序列化程序使用IBsonSeriazer和IBsonSeriazationProviderSeriazerBase没有成功。 或者 第一个解

  • 问题内容: 在C ++程序中使用Redis数据库的最佳方法是什么? 问题答案: 使用C绑定库?似乎在任何地方都没有C ++包装器。

  • 本文向大家介绍如何在C#中使用注册表,包括了如何在C#中使用注册表的使用技巧和注意事项,需要的朋友参考一下 一、什么是注册表         注册表是Microsoft Windows操作系统和其应用程序中的一个重要的层次型数据库,用于存储系统和应用程序的设置信息。由键(key,或称“项”)、子键(subkey,子项)和值项(value)构成。一个键就是树状数据结构中的一个节点,而子键就是这个节点

  • 本文向大家介绍如何在C#中使用OpenCV(GOCW使用教程),包括了如何在C#中使用OpenCV(GOCW使用教程)的使用技巧和注意事项,需要的朋友参考一下 1、什么是GOCW       为了解决在Csharp下编写OpenCV程序的问题,我做过比较深入的研究,并且实现了高效可用的方法GreenOpenCsharpWrapper(GOCW)。通过这种方法,能够分离界面和算法业务,高效率完成算法