non*_*ion 23 c# visual-studio visual-studio-2017 c#-8.0
我想在Visual Studio 2017中使用C#8.0(尤其是范围和不可空的引用类型)。可能吗?
小智 9
添加到series0ne关于主要版本的评论:的确,新的VS通常带有新的C#版本。但是,根据过去的经验,可以通过将“ Microsoft.Net.Compilers” Nuget软件包升级来将VS的早期版本升级为C#代码的较新版本。您可以参考这篇文章以获取更多信息。如何在Visual Studio 2015中使用c#7?
展望未来,Microsoft希望比过去更紧密地将C#语言版本与框架版本联系在一起。他们确实只希望您将C#8与.NET Core 3.x和.NET Standard 2.1项目一起使用,这意味着要使用Visual Studio2019。我对C#8是否支持.NET Framework的回答?包含所有血腥细节。
但是,如果你真的想在Visual Studio 2017年现在可以使用C#8使用同样的伎俩带来C#7到Visual Studio 2015:安装最新版本的Microsoft.Net.Compilers 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>
Run Code Online (Sandbox Code Playgroud)
--
using System;
namespace CSharp8Test
{
public class Class1
{
public string? NullableString { get; } = "Test";
public static void Test()
{
Console.WriteLine(Test2());
static int Test2() => 5;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用Microsoft.Net.Compilers.Toolset而不是Microsoft.Net.Compilers
vs2017
此包旨在替代Microsoft.Net.Compilers(仅适用于 Windows 的包)和 Microsoft.NETCore.Compilers。这些包现在已弃用,将来会被删除。
该包需要 MSBuild 15.0 和 .NET Destkop 4.7.2 或 .NET Core 2.1
软件包版本:
与 vs2019 相比,包版本映射了 c#8 支持的能力。
如何使用
将这些行添加到 .csproj
<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>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6001 次 |
最近记录: |