ale*_*611 1 c# code-generation
我需要生成将从项目中已有的抽象类继承的源代码,并且源生成器项目本身进行编译。但是,当编译器抱怨生成的源无法识别抽象类时,即使它位于同一个项目中。我是否需要以某种方式告诉生成器项目自身具有运行时依赖性?
编辑:我使用 Microsoft.CodeAnalysis.CSharp。以下是描述该情况的代码: https://github.com/alebo611/csharpsourcegenproblem/tree/main/MyGeneratorProject
也就是说,我只想生成已经定义的“车辆”的子类。如果您在 Visual Studio 中运行它,您将收到以下错误:
错误 CS0246 找不到类型或命名空间名称“Vehicle”(您是否缺少 using 指令或程序集引用?) Consumer generated.cs
添加“Using ApplicationContext”没有帮助,它会抱怨找不到上下文。
源生成器用于生成新的源代码,然后将其编译并添加到程序集中。这意味着通常仅在构建时才需要源生成器程序集。因此,当通过 消耗源生成器时ProjectReference,通常使用OutputItemType="Analyzer"和ReferenceOutputAssembly="false":
<ProjectReference Include="SourceGenerator.csproj"
OutputItemType="Analyzer"
ReferenceOutputAssembly="false" />
Run Code Online (Sandbox Code Playgroud)
Vehicle然而,在您的示例中,源生成器程序集包含消费程序集所需的类型。这意味着源生成器程序集必须由使用者引用,因此您必须省略该ReferenceOutputAssembly参数:
<ProjectReference Include="SourceGenerator.csproj"
OutputItemType="Analyzer" />
Run Code Online (Sandbox Code Playgroud)
不幸的是,消费者必须注意发电机的这些细节。幸运的是,通过包使用源生成器时情况有所不同。在这种情况下,包作者会注意将构建时所需的程序集存储在analyzers/dotnet/cs包内,并将运行时所需的程序集存储在lib/[targetframework].
| 归档时间: |
|
| 查看次数: |
1274 次 |
| 最近记录: |