繁体   English   中英

C# 编译器抛出语言版本 (LangVersion) 引用错误“无效的‘可空’值:‘Enable’ for C# 7.3”

[英]C# compiler throws Language Version (LangVersion) reference error "Invalid 'nullable' value: 'Enable' for C# 7.3"

我有几个 .NET 标准项目的解决方案,我想启用 c# 8 并且可以为空,如下所示:

<PropertyGroup>
    <TargetFramework>netstandard2.1</TargetFramework>
    <LangVersion>8.0</LangVersion>
    <Nullable>enable</Nullable>
  </PropertyGroup>

注意:这些设置位于您的 .csproj 文件中。

问题是有些项目编译正常,有些有错误:

无效的“可空”值:C# 的“启用” 7.3。 请使用“预览”或更高版本的语言

我有 Visual Studio 16.2 Preview 2 和 .NET Core 3 Preview 6。这是预览中的错误还是我做错了什么?

就我而言,当我将目标框架从 .NET Standard 2.1 更改为 .NET Standard 2.0 时,Visual Studio 2022 遇到了这个问题。 我通过删除 .csproj 文件中的<Nullable>enable</Nullable>重新启动 Visual Studio 解决了我的问题。

原始.csproj文件:

<PropertyGroup>
  <TargetFramework>netstandard2.1</TargetFramework>
  <Nullable>enable</Nullable>
</PropertyGroup>

新建.csproj 文件:

<PropertyGroup>
  <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

您应该尝试<LangVersion>preview</LangVersion>因为错误消息提示。

我有这样的错误“无效的'nullable'值:C# 7.3的'Enable'。请使用语言版本'8.0'或更高版本”,我能够通过更改指定目标框架的顺序来解决它。

<TargetFrameworks>net6.0;net48</TargetFrameworks>

<TargetFrameworks>net48;net6.0</TargetFrameworks>

还有另一种解决方案...向您的项目文件添加一些条件,以便仅对支持它的目标框架使用新的可空特性。

这里有一篇很棒的文章……下面的导入代码片段全部归功于作者:

<!-- Set the LangVersion = 8 -->
<PropertyGroup>
    <TargetFrameworks>netstandard2.0;netstandard2.1</TargetFrameworks>
    <LangVersion>8.0</LangVersion>
</PropertyGroup>

<!-- Only enable nullable feature for the supported frameworks -->
<PropertyGroup Condition=" '$(TargetFramework)' != 'netstandard2.0' ">
    <Nullable>enable</Nullable>
</PropertyGroup>

然后在不受支持的框架中隐藏警告消息:

<PropertyGroup Condition=" $(Nullable) != 'enable' ">
  <NoWarn>$(NoWarn);CS8632</NoWarn>
</PropertyGroup>

当我不得不将 C# 语言的编译时支持版本从 11.0 降级到 7.0 时,我遇到了同样的问题。 我解决了 .net 7.0 项目的问题,并且能够在 VS2022 中通过从“启用”到“禁用”的简单替换来编译它。

查看最终结果:

<PropertyGroup>
   <TargetFramework>net7.0</TargetFramework>
   <ImplicitUsings>disable</ImplicitUsings>
   <Nullable>disable</Nullable>
   <LangVersion>7.0</LangVersion>
</PropertyGroup>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM