Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CS0757 & CS0102 Logger source generator error #10553

Open
ali50m opened this issue Mar 11, 2025 · 5 comments
Open

CS0757 & CS0102 Logger source generator error #10553

ali50m opened this issue Mar 11, 2025 · 5 comments
Labels
Investigate Requires further investigation by the WPF team.

Comments

@ali50m
Copy link

ali50m commented Mar 11, 2025

Description

I have a WPF project, and recently I introduced an ASP FrameworkReference to it, but it resulted in a logger source generator error.

So, I simplified the project as much as possible to reproduce this issue. The code is at WpfLogger.

Reproduction Steps

git clone [email protected]:ali50m/WpfLogger.git
cd WpfLogger
dotnet build

Expected behavior

Build successfully.

Actual behavior

Build fail.

  WpfLogger_gyim0c0w_wpftmp failed with 2 error(s) (2.2s)
    C:\Users\liu\source\repos\test\WpfLogger\src\WpfLogger\obj\Debug\net9.0-windows\Microsoft.Extensions.Logging.Generators\Microsoft.Extensions.Logging.Generators.LoggerMessageGenerator\LoggerMessage.g.cs(13,36): error CS0757: A partial method may not have multiple implementing declarations
    C:\Users\liu\source\repos\test\WpfLogger\src\WpfLogger\obj\Debug\net9.0-windows\Microsoft.Extensions.Logging.Generators\Microsoft.Extensions.Logging.Generators.LoggerMessageGenerator\LoggerMessage.g.cs(9,128): error CS0102: The type 'LoggerExtensions' already contains a definition for '__SayHiCallback'

Build failed with 2 error(s) in 3.8s

Regression?

No response

Known Workarounds

Pick any of following can make the build pass.

  1. remove Asp frameworkreference from the project link
  2. downgrade the nuget of "Serilog.Extensions.Logging" to 3.1.0 link
  3. remove the namespace of this assemble in xaml file link

Impact

It will stop me using logger source generator in my WPF project after introducing ASP FrameworkReference.

Configuration

No response

Other information

dotnet: 9.0.2
windows: 10.0.26100
visual studio: Community Version 17.13.2

@lindexi
Copy link
Member

lindexi commented Mar 11, 2025

Reference: #10093 and #8128 and #4311


@ali50m Build pass by remove Microsoft.AspNetCore.App FrameworkReference in wpftmp project:

  <Target Name="Fxxxxx" AfterTargets="RemoveDuplicateAnalyzers"
          Condition="$(MSBuildProjectName.Contains('_wpftmp'))">
    <ItemGroup>
      <FrameworkReference Remove="Microsoft.AspNetCore.App" />
    </ItemGroup>
  </Target>

Adding the <IncludePackageReferencesDuringMarkupCompilation>false</IncludePackageReferencesDuringMarkupCompilation> will cause the CS8795 error


Adding the

  <Target Name="Fxxxxx" AfterTargets="RemoveDuplicateAnalyzers">
    <ItemGroup>
      <Analyzer Remove="C:\Program Files\dotnet\packs\Microsoft.AspNetCore.App.Ref\9.0.1\analyzers/dotnet/roslyn4.4/cs/Microsoft.Extensions.Logging.Generators.dll" />
    </ItemGroup>
  </Target>

will cause the CS8795 error


The logger generator generate twice by WPF and Microsoft.AspNetCore.App ...

The WPF's file is generated in MarkupCompilePass1:

https://github.com/dotnet/wpf/blob/e3ce5f83070d04582f652b5e010c4beb969034ca/src/Microsoft.DotNet.Wpf/src/PresentationBuildTasks/Microsoft.WinFX.targets#L211C10-L251

,and it be used in

GeneratedCodeFiles="@(_GeneratedCodeFiles)"

@franchyd
Copy link

Also related:
#10175
#7624

Source Generator incompatibility in WPF projects is a growing problem as SG's become more prevalent.

@lindexi
Copy link
Member

lindexi commented Mar 12, 2025

@franchyd The main reason is WPF have to create the tmp project to help build the xaml. And I think it can fix by using SourceGenerator to build the xaml or convert the xaml to csharp code or VB code, just like the MAUI or UNO or Avalonia.

@himgoyalmicro himgoyalmicro added the Investigate Requires further investigation by the WPF team. label Mar 12, 2025
@franchyd
Copy link

@franchyd The main reason is WPF have to create the tmp project to help build the xaml. And I think it can fix by using SourceGenerator to build the xaml or convert the xaml to csharp code or VB code, just like the MAUI or UNO or Avalonia.

Yeah but thats not even on the WPF roadmap. Whereas many SG's are broken now due to the tmp project not de-duplicating SGs #7624 (comment)

@lindexi
Copy link
Member

lindexi commented Mar 17, 2025

I'd like to add the Property as the Identifi of the wpf_tmp project. So that the analyzer can be skip to do more other thing.


Emmm, it seems that the _TemporaryTargetAssemblyProjectName is enough.

<_TemporaryTargetAssemblyProjectNameNoExtension>$([System.String]::Join("_", "$(_ParentProjectName)", "$([System.IO.Path]::GetFileNameWithoutExtension($([System.IO.Path]::GetRandomFileName())))", "wpftmp"))</_TemporaryTargetAssemblyProjectNameNoExtension>

No. The wpftmp project can not get the right _TemporaryTargetAssemblyProjectName property.


Ok, the $(MSBuildProjectName.Contains('_wpftmp')) is the good one.

and !($(MSBuildProjectName.Contains('_wpftmp')))">true</RunRefApiCompat>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Investigate Requires further investigation by the WPF team.
Projects
None yet
Development

No branches or pull requests

4 participants