6

I'm using VS 2017 usually for console applications. But now I have to create a new ASP.NET MVC project and found something curious.

Auto generation of getter and setter (context menu "Quick actions and refactoring < Ecapsulate field (and use property)") raise a compiling error. To give an easy example:

public class Person
{
    private string firstname;

    public string Firstname { get => firstname; set => firstname = value; }
}

Error message:

1>------ Build started: Project: DummyASPNETMVC, Configuration: Debug Any CPU ------
1>C:\dev\C#\DummyASPNETMVC\DummyASPNETMVC\Models\Person.cs(12,39,12,41): error CS1043: { or ; expected
1>C:\dev\C#\DummyASPNETMVC\DummyASPNETMVC\Models\Person.cs(12,39,12,41): error CS1513: } expected
1>C:\dev\C#\DummyASPNETMVC\DummyASPNETMVC\Models\Person.cs(14,2,14,2): error CS1513: } expected
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Uncomment the getter and setter will make the things working again.

I'm wondering because this works fine within a console application. Where's the difference here?

Panagiotis Kanavos
  • 120,703
  • 13
  • 188
  • 236
yesfabime
  • 814
  • 1
  • 12
  • 27

1 Answers1

13

Thanks to Panagiotis and Tetsuya. It was the version of c#.

As a reference to this question, you have to do three things:

  1. Uninstall "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" via Nuget Package Manager and reinstall the newest version (currently the 1.0.4)
  2. After this, update Microsoft.Net.Compilers to the newest version (currently 2.2.0)
  3. Change the c# language via project "properties < build < advanced" to version 7.

done.

yesfabime
  • 814
  • 1
  • 12
  • 27
  • 1
    It seems that more recently the language version is automatically set depending on the targeted framework: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version. – qqtf Aug 10 '22 at 08:40