如何修复 C# 源生成器未找到引用的问题

Edu*_*eca 7 .net c# roslyn .net-core .net-5

我有一个使用 C# 源生成器的项目。

https://github.com/efonsecab/PTIMicroservicesGenerators

我遇到的问题是编译控制台应用程序时遇到此问题

CSC:警告 CS8785:生成器“OpenApiClientServicesGenerator”无法生成源。它不会对输出产生影响,因此可能会出现编译错误。异常的类型为“FileNotFoundException”,消息为“无法加载文件或程序集“Microsoft.OpenApi.Readers,Version=1.2.3.0,Culture=neutral,PublicKeyToken=3f5743946376f042”或其依赖项之一。该系统找不到指定的文件。'

有谁知道使用 C# 源生成器时解决此问题的正确方法是什么?谢谢您的帮助。

tym*_*tam 6

截至 2022 年 5 月,我相信您需要做的不仅仅是添加包引用:

在生成器项目文件中:

  1. 包参考必须有GeneratePathProperty="true" PrivateAssets="all"
  2. 需要指定和配置GetTargetPathDependsOn

这篇知识基于查看https://github.com/dotnet/roslyn-sdk/blob/main/samples/CSharp/SourceGenerators/SourceGeneratorSamples/CSharpSourceGeneratorSamples.csproj

  <ItemGroup>
    <!-- Generator dependencies -->
    <PackageReference Include="CsvTextFieldParser" Version="1.2.2-preview" GeneratePathProperty="true" PrivateAssets="all" />
  </ItemGroup>

  <PropertyGroup>
    <GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn>
  </PropertyGroup>

  <Target Name="GetDependencyTargetPaths">
    <ItemGroup>
      <TargetPathWithTargetPlatformMoniker Include="$(PKGCsvTextFieldParser)\lib\netstandard2.0\CsvTextFieldParser.dll" IncludeRuntimeDependency="false" />
    </ItemGroup>
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)


Jon*_*olf 3

问题是您没有部署所有依赖项。

将以下内容添加到PTI.Microservices.Generators.csproj项目文件中

<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
Run Code Online (Sandbox Code Playgroud)

告诉 msbuild 将所有依赖项复制到输出目录。

  • 我正是这样做的,但错误(CSC:警告 CS8785)仍然存在,生成器失败,因为它找不到源生成器程序集引用的程序集。两个程序集都针对 netstandard2.0 (4认同)