提问人:aybe 提问时间:8/13/2023 更新时间:9/18/2023 访问量:215
必须重新启动 Visual Studio 才能选取源生成器文件
Must restart Visual Studio for source generator files to be picked up
问:
我有一个可以工作的源生成器类库,但使用者项目仅在重新启动 Visual Studio 后才获取最新生成的代码。
至少可以说,重新启动 Visual Studio 而不仅仅是重新生成解决方案是非常不方便的。
尝试卸载/重新加载项目/解决方案,但什么都没有。
试图清除 中的缓存,什么都没有。%LOCALAPPDATA%\Microsoft\VisualStudio\<version>\ComponentModelCache
截至今天,使用最新版本的 Visual Studio 2022。
实际的源生成器,最简单的一个:
using System;
using Microsoft.CodeAnalysis;
namespace ClassLibrary1
{
[Generator]
public class Class1 : ISourceGenerator
{
public void Initialize(GeneratorInitializationContext context)
{
}
public void Execute(GeneratorExecutionContext context)
{
context.AddSource("test.g.cs", $"// {DateTime.Now:F}");
}
}
}
有什么建议吗?
答:
0赞
Nefanator
9/18/2023
#1
若要避免重新启动 Visual Studio,可以运行 .这将清除缓存。dotnet build-server shutdown
我已将其添加到我的源代码生成器项目的预构建步骤中,这似乎可以解决问题。
我在 Microsoft Learn Q&A 中找到了这个解决方案。这要归功于 Suchiman,他最初给出了这个答案:
“它的工作方式是,csc.exe,即C#编译器,通常会启动一个名为VBCSCompiler.exe的”编译服务器“(以避免一遍又一遍地启动进程的JIT开销)。在这种情况下,csc.exe只是获取参数并通过 IPC 将它们转发给VBCSCompiler.exe来完成工作。如果 VS 关闭,则该编译器进程将关闭,如果在 VS 外部使用它,则该编译器进程将具有空闲超时。源生成器是一个编译器插件,因此 VBCSCompiler 将加载该源生成器 dll 并执行它,但一旦加载,它就不会对 dll 进行更改”
评论
1赞
aybe
9/18/2023
不幸的是,它并不可靠。
评论