我在使用 Visual Studio 2019 预览版测试 C# 9.0 的新功能时遇到了这个问题。我正在测试 init setter,但编译器显示错误消息:
错误 CS0518 未定义或导入预定义类型“System.Runtime.CompilerServices.IsExternalInit”。以下是我尝试过的代码片段:
public class Book
{
string ISBN { get; init; }
}
Run Code Online (Sandbox Code Playgroud)
Kin*_*oza 53
这是 Visual Studio 2019 中的一个尚未修复的小错误。要解决此问题,您需要在项目中的任何位置添加一个以命名IsExternalInit空间命名的虚拟类System.Runtime.CompilerServices。这样就可以了。
如果编写一个库,最好将这个类设为内部,否则你最终会得到两个定义相同类型的库。
namespace System.Runtime.CompilerServices
{
internal static class IsExternalInit {}
}
Run Code Online (Sandbox Code Playgroud)
编辑(2020 年 11 月 16 日):
根据我从 C# 语言团队的主要开发负责人 Jared Parsons 那里得到的答复,上述问题不是错误。编译器抛出此错误是因为我们正在针对较旧的 .NET Framework 版本编译 .NET 5 代码。请看下面他的留言:
感谢您抽出时间提交此反馈问题。不幸的是,这不是一个错误。该
IsExternalInit类型仅包含在net5.0(和未来的)目标框架中。在针对较旧的目标框架进行编译时,您需要手动定义此类型。
链接到 Visual Studio 开发人员社区的报告:https : //developercommunity.visualstudio.com/content/problem/1244809/error-cs0518-predefined-type-systemruntimecompiler.html
如果您想继续使用 .NET Core App 3.1,则需要添加类似 Kinin Roza 在此错误报告中解释的类型。
但是,如果您csproj将设置更改<TargetFramework>为net5.0,它将解决您的问题,因为此类型仅在 5.0 中定义。
这是我的示例控制台应用程序csproj文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6599 次 |
| 最近记录: |