我有一个使用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月,我认为您需要做的不仅仅是添加包引用:
在生成器项目文件中:
- 包引用必须具有
GeneratePathProperty="true" PrivateAssets="all"
- 需要指定和配置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" />