引用nuget包时出现Roslyn FileNotFoundException



我有一个Roslyn代码生成项目,它有一个实现IIncrementalGenerator的类。

我已将以下包参考添加到发电机项目

<PackageReference Include="Mono.TextTemplating" Version="2.2.1" />

但是当我构建应用程序时,我得到以下错误

System.IO.FileNotFoundException:"无法加载文件或程序集"Mono.TextTemplateing,Version=2.2.0.0,Culture=neutral,PublicKeyToken=4fa72d50da25cb30"或其依赖项之一。"。系统找不到指定的文件。'

我也试过

<PackageReference Include="Mono.TextTemplating.Roslyn" Version="2.2.1" />

但也会遇到同样的问题。

我如何使用我的代码生成项目中的这个包?

这里有一个示例,说明如何在不将编译时依赖项推送到使用应用程序的情况下包含它。

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" />
<PackageReference Include="Handlebars.Net" Version="1.10.1" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" GeneratePathProperty="true" PrivateAssets="all" />
</ItemGroup>
<PropertyGroup>
<GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn>
</PropertyGroup>
<Target Name="GetDependencyTargetPaths">
<ItemGroup>
<TargetPathWithTargetPlatformMoniker Include="$(PKGCsvTextFieldParser)libnetstandard2.0CsvTextFieldParser.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGHandlebars_Net)libnetstandard2.0Handlebars.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGNewtonsoft_Json)libnetstandard2.0Newtonsoft.Json.dll" IncludeRuntimeDependency="false" />
</ItemGroup>
</Target>

这意味着:

  1. 当您在磁盘上构建生成器时,您的依赖项实际上并没有与生成器一起部署
  2. 您并没有将依赖项作为分析器与生成器本身一起传递给编译器。可能需要传递所有文件,而不仅仅是包含生成器本身的文件

如果没有关于如何在出现错误的项目中使用生成器的详细信息,我无法给出进一步的提示。

最新更新