dotnet / aspnetcore

ASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.
https://asp.net
MIT License
35.58k stars 10.06k forks source link

inconsistent file encoding in ProjectTemplates #57679

Open zivillian opened 2 months ago

zivillian commented 2 months ago

Is there an existing issue for this?

Describe the bug

This is a successor of #11530.

All .cshtml and .razor files have UTF-8 encoding with BOM. All .cs files have no BOM. This in combination with Visual Studio results in files being saved in ANSII (or system code page) encoding.

We've hit this problem when adding an error to the ModelState in the code behind file:

ModelState.AddModelError(string.Empty, "This is an error with än umlaut.");

Visual Studio will not save this with UTF-8 encoding and this will break the error message in the browser.

Expected Behavior

To work around the Visual Studio behaviour, all templates files should be in UTF-8 encoding with BOM.

Steps To Reproduce

  1. add a new razor page (either via context menu in VS or dotnet new page --name Umlaut --namespace YourApp.Pages --output Pages)
  2. in Visual Studio add an Umlaut (ModelState.AddModelError(String.Empty, "Än Umlaut");)
  3. build on linux dotnet build -c release
  4. the binary contains a unicode replacement character which will be rendered in the markup

a minimal repro is available at unicorn-development/aspnetcore57679

Exceptions (if any)

No response

.NET Version

8.0

Anything else?

No response

zivillian commented 2 months ago

https://github.com/dotnet/roslyn/issues/11932 may explain, why it only breaks when compiling on linux.

In our scenario we are developing on windows, but running the build in Azure DevOps on ubuntu because it's way faster during the restore.