Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing C# 9.0 in VS2019 - CS0518 IsExternalInit is not defined or imported ... How do I define/import it?

Tags:

c#

c#-9.0

EDIT [Nov 29 2020]: .NET 5.0 is out now, but the solution below is still required if you're targetting .NET Standard 2.1


C# 9.0 is still under development. There are a couple references which lead me to believe it should be testable now (some of it, anyway).

  1. A Microsoft blog by Mr. Awesome himself, introducing the features. https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/
  2. The language tracking page on github: https://github.com/dotnet/roslyn/blob/master/docs/Language%20Feature%20Status.md

I'm using VS 2019 16.7 Preview 3.1. I've selected the language version as Preview for a project.

Some C# 9 features, I can use. Like: Dictionary<string, object> Stuff = new()

But using the new init feature gives me this error: Error CS0518 Predefined type 'System.Runtime.CompilerServices.IsExternalInit' is not defined or imported

How do I fix this?

Examples of code causing the error:

class Test {    public int Hello { get; init; } } 

and

record Test(int hello); 

The record definition is shorthand and expands into something that uses init, which is why it's also affected.

The language tracking page I linked to above says the feature was Merged into 16.7p3, which I am using.

Am I just being overly excited? Do I need to wait? Or is there a way to play with these features right now :D

EDIT (requested in comments) - Adding csproj for .net 5.0 console app:

<Project Sdk="Microsoft.NET.Sdk">   <PropertyGroup>     <OutputType>Exe</OutputType>     <TargetFramework>net5.0</TargetFramework>     <LangVersion>preview</LangVersion>   </PropertyGroup> </Project> 

EDIT #2: A workaround posted here - https://github.com/dotnet/roslyn/issues/45510

like image 815
Josh Avatar asked Jun 29 '20 23:06

Josh


People also ask

What is testing in C programming?

Testing means verifying correct behavior. Testing can be done at all stages of module development: requirements analysis, interface design, algorithm design, implementation, and integration with other modules.

Does C have unit testing?

One unit testing framework in C is Check; a list of unit testing frameworks in C can be found here and is reproduced below. Depending on how many standard library functions your runtime has, you may or not be able to use one of those.

What can be used for unit testing in C?

The most scalable way to write unit tests in C is using a unit testing framework, such as: CppUTest. Unity. Google Test.

How do I test C in Visual Studio?

Create a test project in Visual Studio 2019Right-click on the Solution node in Solution Explorer. In the pop-up menu, choose Add > New Project. Set Language to C++ and type "test" into the search box.


1 Answers

This is a bug in the current preview and the latest master branch (June 27). A simple record in sharplab.io creates the same error.

Just add the missing type somewhere in your project

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

Records and init will work without problem.

Only LinqPad 6 seems to work without problems, probably because it includes that type too

like image 52
Panagiotis Kanavos Avatar answered Oct 15 '22 09:10

Panagiotis Kanavos