我从一个net6.0岁的项目开始.并决定为较旧的受支持版本提供netstandard2.0作为内部Nuget输出.

在.proj文件中将<TargetFramework>net6.0</TargetFramework>替换为<TargetFrameworks>net6.0;netstandard2.0</TargetFrameworks>.现在有了这个

enter image description here

不过,问题在于使用了可为空的引用类型.net6.0netstandard2.0使用不同的语言版本

enter image description here

我明白我必须做其中一件事

  • 将Net6.0的语言降级
  • 使用某些公共文件和其他单独的文件创建单独的项目
  • 使用条件编译

我try 了条件编译

enter image description here

结果表明,当前的主动框架为netstandard2.0.我在想,怎么才能改变这一点?我在项目级的"条件编译符号"中为"Debug and net6.0 Custom Symbol"添加了符号.我可以换成那样.现在,我设置了符号,使netstandard2.0处于活动状态.我重建了我所看到的-它编译成了bin\Debug\net6.0,但bin\Debug\netstandard2.0什么都没有.我也收到了错误-

错误CS8630对于C#7.3,‘Null’值无效:‘Enable’.请使用语言版本‘8.0’或更高版本.项目名称(net6.0)C:\dev\Components\项目名称\csc 1活动

没有一个文件内部有错误.所有引用/包似乎都解决得很好.我删除了代码文件中所有特定于net6.0的代码片段.这里需要一些建议.谢谢

推荐答案

在多目标项目中,VS允许在智能感知和语法突出显示的目标之间切换-文本编辑器左上角有一个下拉列表(我使用.NET 7,因为我没有安装.NET 6):

enter image description here

对于JetBrains Rider用户,通过 Select 文本编辑器底部的框架也可以做到这一点:

enter image description here

另外,在我的复制器中,我向.csproj中的Nullable元素添加了条件属性:

<PropertyGroup Condition="'$(TargetFramework)' == 'net7.0'">
    <Nullable>enable</Nullable>
</PropertyGroup>

对于仅可为空的,您还可以内联:

<Nullable Condition="'$(TargetFramework)' == 'net7.0'">enable</Nullable>

Csharp相关问答推荐

C# uwp中的Win11启动屏幕剪辑工作方式不同

. NET 8 HttpClient post参数将其情况更改为camel'

通过EFCore上传大量数据.

EF Core. Income和. AsNoTracking正确用法

在多对多关系上不删除实体

ITypeLib2.GetLibStatistics()在C#中总是抛出AccessViolationException

尽管保证密钥不同,但已添加相同密钥的项(&Q;)

如何使用C#获取FireStore中的列表输出文档

HttpClient 415不支持的媒体类型错误

在C#中反序列化/序列化具有混合元素顺序的XML时出现问题

当使用Dapper映射DBNull时,我可以抛出异常吗?

如何让两个.NET版本不兼容的项目对话?

源代码生成器项目使用`dotnet build`编译,而不是在Visual Studio中编译?

如何返回具有泛型的类?

System.NotSupportdException:流不支持读取

基于C#方法的EF核心过滤查询(缓冲与流)

KeyDown从我的文本框中删除输入,如何停止?

未显示详细信息的弹出对话框

Visual Studio 17.8.0制表符自动完成问题--三缩进

如何为控制器PUT操作绑定对象数组