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



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

https://github.com/efonsecab/PTIMicroservicesGenerators

我遇到的问题是,我在编译控制台应用程序时遇到了这个问题

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

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

截至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)libnetstandard2.0CsvTextFieldParser.dll" IncludeRuntimeDependency="false" />
</ItemGroup>
</Target>
</Project>

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

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

<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

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

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

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

最新更新