11

I have a component and I want to see generated by RazorSourceGenerator *_razor.g.cs file.

Previously with VS2019 and .Net5 I could open the "\obj\Debug\net5.0\Razor\Pages" folder and found the generated files there.

Now, If I have some compillation error in *.razor component I can see a error message with refers to the "\Microsoft.NET.Sdk.Razor.SourceGenerators\Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator" folder but there is no such folder. It seems it is deleted after the project has build.

Is there way to preserve this folder to see the *.razor file compillation result?

Eugene Maksimov
  • 1,504
  • 17
  • 36

2 Answers2

16

Thank you Mister Maggo for pointing to the article. Let me post full answer.

To preserve generated *_razor.g.cs files set the EmitCompilerGeneratedFiles property in the project file. But in this case you will not be able to see generated code by double clicking on error in Output or Error List window because files will be saved into

obj\Debug\generated\Microsoft.NET.Sdk.Razor.SourceGenerators\Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator

forlder. But the error will refer to

Microsoft.NET.Sdk.Razor.SourceGenerators\Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator\

folder. So you need to specify that files should be preserved in this folder by setting the CompilerGeneratedFilesOutputPath property.

So, the short anser is to add this into your project file in the project section:

  <PropertyGroup>
    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
    <CompilerGeneratedFilesOutputPath>.</CompilerGeneratedFilesOutputPath>
  </PropertyGroup>
Eugene Maksimov
  • 1,504
  • 17
  • 36
  • 1
    On the other hand, when I set `CompilerGeneratedFilesOutputPath` to "." (rather than ".\obj") Visual Studio (2022) will throw lots of ambiguity errors ([CS0229](https://t1p.de/poack) and [CS0121](https://t1p.de/3dv01) because Visual Studio parses the content of the folders and finds all the definitions twice, once in the .razor file and once again in the _razor.g.cs file. The project won't compile anymore. – Jan Jun 06 '22 at 11:23
  • 1
    Add this to .csproj to remove compilation errors: `$(DefaultItemExcludes);Microsoft.NET.Sdk.Razor.SourceGenerators\**\*` – xiety Jul 05 '22 at 07:56
6

You can set the property EmitCompilerGeneratedFiles to true in your csproj.

This is a good write-up of how it works and the options for where the files get written

Mister Magoo
  • 7,452
  • 1
  • 20
  • 35