我开始了一个
net6.0
项目。并决定提供 netstandard2.0
作为旧支持版本的内部 nuget 输出。
在 .proj 文件中将
<TargetFramework>net6.0</TargetFramework>
替换为 <TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>
。现在有这个
问题在于可空引用类型的使用。
net6.0
和 netstandard2.0
使用不同的语言版本
我知道我必须做其中之一
我尝试了条件编译
并且显示当前活动框架是
netstandard2.0
。我就想知道,怎么改变呢?我在项目级别的“条件编译符号”中添加了符号,用于“调试和net6.0自定义符号”。我能够以这种方式切换。现在,我设置符号以使 netstandard2.0
处于活动状态。我重建了我所看到的 - 它编译为 bin\Debug\net6.0
但 bin\Debug\netstandard2.0
中没有任何内容。我也收到错误 -
错误 CS8630 无效的“可空”值:C# 7.3 的“启用”。请使用语言版本“8.0”或更高版本。项目名称 (net6.0) C:\DEV\Components\projectName\CSC 1 Active
没有一个文件内部有错误。所有参考资料/包似乎都解决得很好。我删除了代码文件中所有特定于 net6.0 的部分。这里需要一些建议。谢谢
在多目标项目中,VS 允许在智能感知的目标之间切换 - 文本编辑器的左上角有一个下拉菜单(我使用 .NET 7,因为我没有安装 .NET 6):
对于 JetBrains Rider 用户,通过选择文本编辑器底部的框架也可以实现相同的效果:
还在我的小重现中,我将以下内容添加到 .csproj:
<PropertyGroup Condition="'$(TargetFramework)' == 'net7.0'">
<Nullable>enable</Nullable>
</PropertyGroup>
对于可为空的情况,您也可以内联执行:
<Nullable Condition="'$(TargetFramework)' == 'net7.0'">disable</Nullable>