如何解决C#源代码生成器找不到引用的问题

6

我正在使用 C# 源代码生成器进行这个项目。

https://github.com/efonsecab/PTIMicroservicesGenerators

我的问题是,在编译控制台应用程序时出现以下警告:

CSC:警告 CS8785:生成器“OpenApiClientServicesGenerator”未能生成源代码。它将不会有贡献并且可能会导致编译错误。异常的类型为 'FileNotFoundException',信息为“无法加载文件或程序集 'Microsoft.OpenApi.Readers、Version=1.2.3.0、Culture=neutral、PublicKeyToken=3f5743946376f042' 或其某一个依赖项。系统找不到指定的文件。”

有人知道在使用 C# 源代码生成器时修复此问题的正确方法吗? 谢谢帮助。

3个回答

4
截至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>

谢谢!我已经试了几个小时,一直在尝试弄清楚这个问题... - Thraka

3
问题在于您没有部署所有的依赖项。
请将以下内容添加到您的PTI.Microservices.Generators.csproj项目文件中。
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

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

4
我已经按照要求操作了,但是错误(CSC: 警告 CS8785)仍然存在,生成器失败是因为它找不到由源代码生成器程序集引用的程序集。这两个程序集都针对netstandard2.0。 - g.pickardou
@g.pickardou 我这里也有同样的问题。 - Christoph Mett

0

我不得不将导入目录更改为镜像缓存目录:

<None Include="$(PkgNewtonsoft_Json)\lib\netstandard2.0\*.dll" Pack="true" PackagePath="/lib/netstandard2.0/" Visible="false" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接