预定义类型 'System.Runtime.CompilerServices.IsExternalInit' 未定义或未导入
Predefined type 'System.Runtime.CompilerServices.IsExternalInit' is not defined or imported
我在使用 Visual Studio 2019 预览版测试 C# 9.0 的新功能时遇到了这个问题。我正在测试 init setter,但编译器显示错误消息:
错误 CS0518 未定义或导入预定义类型 'System.Runtime.CompilerServices.IsExternalInit'。下面是我试过的代码片段:
public class Book
{
string ISBN { get; init; }
}
这是 Visual Studio 2019 中的一个小错误,尚未修复。要解决此问题,您需要在项目的任何位置添加一个名为 IsExternalInit
且命名空间 System.Runtime.CompilerServices
的虚拟 class。这样就可以了。
如果编写一个库,最好将此 class 设为内部,否则您最终可能会得到两个定义相同类型的库。
namespace System.Runtime.CompilerServices
{
internal static class IsExternalInit {}
}
编辑(2020 年 11 月 16 日):
根据我从 C# 语言团队的首席开发主管 Jared Parsons 那里得到的答复,上述问题不是错误。编译器会抛出此错误,因为我们正在针对较旧的 .NET Framework 版本编译 .NET 5 代码。请参阅下面的消息:
Thanks for taking the time to file this feedback issue. Unfortunately
this is not a bug. The IsExternalInit
type is only included in the
net5.0
(and future) target frameworks. When compiling against older
target frameworks you will need to manually define this type.
Link 到 Visual Studio 开发者社区的报告:https://developercommunity.visualstudio.com/content/problem/1244809/error-cs0518-predefined-type-systemruntimecompiler.html
如果您想继续使用 .NET Core App 3.1,您将需要添加像 in this bug report 中解释的 Kinin Roza 类型。
但是,如果您将 csproj
更改为 <TargetFramework>
设置为 net5.0
,它将解决您的问题,因为此类型仅在 5.0 中定义。
这是我的示例控制台应用 csproj
文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
我在使用 Visual Studio 2019 预览版测试 C# 9.0 的新功能时遇到了这个问题。我正在测试 init setter,但编译器显示错误消息:
错误 CS0518 未定义或导入预定义类型 'System.Runtime.CompilerServices.IsExternalInit'。下面是我试过的代码片段:
public class Book
{
string ISBN { get; init; }
}
这是 Visual Studio 2019 中的一个小错误,尚未修复。要解决此问题,您需要在项目的任何位置添加一个名为 IsExternalInit
且命名空间 System.Runtime.CompilerServices
的虚拟 class。这样就可以了。
如果编写一个库,最好将此 class 设为内部,否则您最终可能会得到两个定义相同类型的库。
namespace System.Runtime.CompilerServices
{
internal static class IsExternalInit {}
}
编辑(2020 年 11 月 16 日):
根据我从 C# 语言团队的首席开发主管 Jared Parsons 那里得到的答复,上述问题不是错误。编译器会抛出此错误,因为我们正在针对较旧的 .NET Framework 版本编译 .NET 5 代码。请参阅下面的消息:
Thanks for taking the time to file this feedback issue. Unfortunately this is not a bug. The
IsExternalInit
type is only included in thenet5.0
(and future) target frameworks. When compiling against older target frameworks you will need to manually define this type.
Link 到 Visual Studio 开发者社区的报告:https://developercommunity.visualstudio.com/content/problem/1244809/error-cs0518-predefined-type-systemruntimecompiler.html
如果您想继续使用 .NET Core App 3.1,您将需要添加像 in this bug report 中解释的 Kinin Roza 类型。
但是,如果您将 csproj
更改为 <TargetFramework>
设置为 net5.0
,它将解决您的问题,因为此类型仅在 5.0 中定义。
这是我的示例控制台应用 csproj
文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>