问题标签 [sourcegenerators]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
9 浏览

roslyn - 如何在SourceGenerator中找到类文件到csproj的相对文件路径

我正在使用 SourceGenerator 并分析 aclass创建一个字符串,该字符串需要具有类文件到 csproj 文件的相对路径。

我可以class使用下面的代码找到文件的绝对路径,但不是相对路径

0 投票
1 回答
23 浏览

c# - 字典中断源生成器

我一直在尝试使用源生成器并遇到一个奇怪的问题。

源代码生成器在对其代码进行更改后只会成功执行一次,但每次后续运行都会失败:

我一一删除了部分代码并追踪到:

这是一本我想通过反射填充以生成派生类的字典。如果我删除字典,问题就会消失。另外,如果我Table用其他东西代替。

不过没有什么特别的Table

我的猜测是从源生成器(在本例中为 .net 标准 2.0 类库)引用其他项目会导致问题?不能在源代码生成中使用反射似乎是一个很大的限制?

为了完整起见,我用来测试这个的生成器:

0 投票
0 回答
11 浏览

c# - 部署包含对其他私有项目的引用的 C# 源代码生成器项目

我想发布一个源生成器包,并且我想在源生成器项目上包含一个私有项目依赖项。

例如,假设我的项目是A.SourceGeneratorA.CodeAnalysis.Core。我想A.SourceGenerator依赖A.CodeAnalysis.Core,但使用ProjectReference而不是PackageReference.

这意味着我希望在我的A.SourceGenerator.csproj文件中包含以下行或类似内容:

问题是这个或一些类似的变体将不起作用,并且会在 CS8785 编译器警告下产生源生成错误,并带有以下错误消息:

生成器BenchmarkSourceGenerator无法生成源。它不会影响输出,因此可能会出现编译错误。

异常是FileNotFoundException带有消息的类型:

无法加载文件或程序集A.CodeAnalysis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null或其依赖项之一。该系统找不到指定的文件。

显示上述错误是因为需要将项目的内容本地复制到源生成器所在的目录中。使用时有一个技巧,如此PackageReference所示,但显然不适用于.ProjectReference

我宁愿避免创建源生成器所依赖的全新 NuGet 包,只是为了包含依赖项。另一种解决方案是不将其抽象出来,并且只有一个源生成器项目,包括所有源生成器。