【问题标题】:Why do I keep getting 'Predefined type IsExternalInit it not defined' even after upgrading to .net 5?为什么即使在升级到 .net 5 后,我仍然会收到“未定义的预定义类型 IsExternalInit”?
【发布时间】:2021-08-05 16:55:42
【问题描述】:

我删除了我的 IsExternalInit 定义,因为我们现在使用的是 .net 5.0:

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
    <LangVersion>latest</LangVersion>
    <Nullable>enable</Nullable>
    <WarningsAsErrors>nullable</WarningsAsErrors>
  </PropertyGroup>

但我仍然收到此错误

CS0518 未定义或导入预定义类型“System.Runtime.CompilerServices.IsExternalInit”

在这样的文件中

public sealed record TestDTO
{
    public string SomePropert{ get; private init; } = default!; // error occurs here
}

我可以看到这是针对旧框架时的预期行为,但它不应该在我的情况下工作吗?我做错了什么?

【问题讨论】:

  • 您是否尝试重建并清除所有临时文件 bin/obj 文件夹?您是否偶然多次声明 targetframework?
  • 你是否尝试过“常规”——删除 bin/obj 文件夹,重新启动 VS 并重建。
  • 我已经清理了解决方案,删除了执行项目和引用项目中的 bin/obj,还尝试重新启动 VS 并重建
  • 您是否有多个项目在这里,但并非所有项目都针对只是 .net 5?
  • 另外:在命令行中运行“dotnet --info”在您的项目文件夹中 - 它会告诉您 SDK 是否正在解析(以及:什么版本)

标签: c# visual-studio-2019 .net-5


【解决方案1】:

我认为这是因为我引用的其中一个项目依赖于使用 .net 标准的某些库

为避免在每个项目中添加IsExternalInit.cs,我只是在解决方案根文件夹中添加了一个,并添加了一个名为Directory.Build.Props 的文件,其中包含这些内容

<?xml version="1.0" encoding="utf-8"?>
<Project>
    <ItemGroup>
        <Compile Include="$(MSBuildThisFileDirectory)IsExternalInit.cs" Visible="false" />
    </ItemGroup>
</Project>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2011-08-07
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多