C# 源生成器应该刷新/删除发出的文件

Fri*_*itz 6 msbuild csproj roslyn .net-5 sourcegenerators

我创建了一个源生成器来扩展满足某些条件的(部分)类。为了检查和查看生成的代码,我通过将以下内容添加到我的项目中来启用这些文件的发射:

    <PropertyGroup>
        <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
        <CompilerGeneratedFilesOutputPath>Generated</CompilerGeneratedFilesOutputPath>
    </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

只要我不进行重构(例如重命名类),这就有效。因为对于每个类,当我重命名“源”类时,都会生成一个文件,但不会删除该文件。

所以我添加了以下代码来清理所有生成的文件(在清理和重建时)

    <Target Name="CleanSourceGeneratedFiles" AfterTargets="Clean">
        <RemoveDir Directories="Generated" />
    </Target>
Run Code Online (Sandbox Code Playgroud)

然而,每次重建都会失败: Error CS2001 Source file 'xyz.generated.cs' could not be found.

因此,我正在寻找另一种方法来使生成的源代码保持最新,该项目不仅会在每次尝试时进行编译。

huo*_*345 6

尝试这个。这个对我有用。

  <PropertyGroup>
    <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
    <CompilerGeneratedFilesOutputPath>Generated</CompilerGeneratedFilesOutputPath>
  </PropertyGroup>

  <Target Name="CleanSourceGeneratedFiles" BeforeTargets="BeforeBuild" DependsOnTargets="$(BeforeBuildDependsOn)">
    <RemoveDir Directories="Generated" />
  </Target>

  <ItemGroup>
    <Compile Remove="Generated\**" />
    <Content Include="Generated\**" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)