2

我想发布一个源生成器包,并且我想在源生成器项目上包含一个私有项目依赖项。

例如,假设我的项目是A.SourceGeneratorA.CodeAnalysis.Core。我想A.SourceGenerator依赖A.CodeAnalysis.Core,但使用ProjectReference而不是PackageReference.

这意味着我希望在我的A.SourceGenerator.csproj文件中包含以下行或类似内容:

<None Include="$(OutputPath)\A.CodeAnalysis.Core.dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />

问题是这个或一些类似的变体将不起作用,并且会在 CS8785 编译器警告下产生源生成错误,并带有以下错误消息:

生成器BenchmarkSourceGenerator无法生成源。它不会影响输出,因此可能会出现编译错误。

异常是FileNotFoundException带有消息的类型:

无法加载文件或程序集A.CodeAnalysis.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null或其依赖项之一。该系统找不到指定的文件。

显示上述错误是因为需要将项目的内容本地复制到源生成器所在的目录中。使用时有一个技巧,如此PackageReference所示,但显然不适用于.ProjectReference

我宁愿避免创建源生成器所依赖的全新 NuGet 包,只是为了包含依赖项。另一种解决方案是不将其抽象出来,并且只有一个源生成器项目,包括所有源生成器。

4

0 回答 0