首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试C# 9.0的VS2019 - CS0518 IsExternalInit没有定义或导入.我如何定义/导入它?

测试C# 9.0的VS2019 - CS0518 IsExternalInit没有定义或导入.我如何定义/导入它?
EN

Stack Overflow用户
提问于 2020-06-29 23:35:31
回答 4查看 13.9K关注 0票数 62

编辑11月29日2020:.NET 5.0现在已经发布,但是如果要获取.NET标准2.1,仍然需要下面的解决方案

C# 9.0仍在开发中。有几个引用让我相信它现在应该是可测试的(至少其中一些)。

  1. 微软博客由Awesome先生自己,介绍了这些功能。https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/
  2. github:https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md上的语言跟踪页面

我使用VS 2019 16.7预览3.1。我选择语言版本作为项目的预览版。

我可以使用一些C# 9特性。喜欢:Dictionary<string, object> Stuff = new()

但是使用新的init特性给了我一个错误:Error CS0518 Predefined type 'System.Runtime.CompilerServices.IsExternalInit' is not defined or imported

我该怎么解决这个问题?

导致错误的代码示例:

代码语言:javascript
运行
复制
class Test
{
   public int Hello { get; init; }
}

代码语言:javascript
运行
复制
record Test(int hello);

记录定义是简写的,并扩展为使用init的东西,这就是它也受到影响的原因。

我链接到的语言跟踪页面上说,这个功能是Merged into 16.7p3,我正在使用它。

我是不是太兴奋了?我需要等吗?或者现在有什么方法来处理这些特性:D

编辑(在注释中请求)-为.net 5.0控制台应用程序添加csproj:

代码语言:javascript
运行
复制
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
    <LangVersion>preview</LangVersion>
  </PropertyGroup>
</Project>

编辑#2:在这里发布的解决方案- https://github.com/dotnet/roslyn/issues/45510

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-06-30 11:12:06

这是当前预览版和最新的主分支(6月27日)中的一个bug。sharplab.io中的一个简单记录会创建相同的错误。

只需在项目中的某个地方添加缺少的类型即可。

代码语言:javascript
运行
复制
using System.ComponentModel;

namespace System.Runtime.CompilerServices
{
    [EditorBrowsable(EditorBrowsableState.Never)]
    internal class IsExternalInit{}
}

记录和init将无问题地工作。

只有LinqPad 6似乎没有问题,可能是因为它也包含了这种类型。

票数 88
EN

Stack Overflow用户

发布于 2021-09-14 18:31:42

如果不喜欢使用IsExternalInit类丢弃每个项目,则可以使用Directory.Build.props自动将文件引用为不可见的编译项:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<Project>
    <ItemGroup>
        <Compile Include="$(MSBuildThisFileDirectory)IsExternalInit.cs" Visible="false" />
    </ItemGroup>
</Project>

在解决方案的根目录中添加/编辑该文件,并在其中添加IsExternalInit.cs文件。这样做将自动将该文件添加到所有项目中。

相对于解决方案的示例文件夹结构:

代码语言:javascript
运行
复制
.
├── Directory.Build.props
├── IsExternalInit.cs
└── Solution.sln
票数 17
EN

Stack Overflow用户

发布于 2021-02-10 11:57:59

借用Panagiotis Kanavos,您实际上可以将IsExternalInit声明为记录本身(自我实现预言):

代码语言:javascript
运行
复制
using System.ComponentModel;

namespace System.Runtime.CompilerServices
{
    [EditorBrowsable(EditorBrowsableState.Never)]
    public record IsExternalInit;
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62648189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档