CodeAnalysis:正在加载Linq程序集

问题描述 投票:0回答:1

我正在编写一个使用Roslyn API提取有关C#源代码文件中定义的符号的信息的应用程序。它通过编译内存中的源代码,然后对其进行扫描来实现此目的。为此,我必须加载源代码引用的程序集和nuget包。

效果很好...直到我开始分析一些包含像这样的简单Linq表达式的源代码:

return Channels.Aggregate( retVal, ( current, channel ) => current | channel.Channel );

该代码的作用细节并不重要。但是,当代码库在内存中编译时,在源代码中包含该行会产生以下诊断错误:

CS1061-'列表'不包含'聚合'的定义,找不到可以接受的扩展方法'聚合'接受类型为'列表'的第一个参数(您是否缺少using指令或程序集引用?)] >

ChannelsList<>。显然我缺少参考资料了:]。

让我感到困惑的是,我为所有项目加载了某些默认程序集和程序包:

okay &= TryAddMetadataReference( "netstandard", result );
okay &= TryAddMetadataReference( "System.Private.CoreLib", result );
okay &= TryAddMetadataReference( "System.Private.Uri", result );
okay &= TryAddMetadataReference( "System.Runtime.Extensions", result );

同样,我认为这段代码的细节并不重要。所有这些调用均成功,这意味着将找到所有目标程序集并将其加载到编译环境中。

但是Linq表达式被拒绝,因为找不到Linq代码。

我需要添加另一个特定于Linq的程序集吗?

我正在编写一个使用Roslyn API提取有关C#源代码文件中定义的符号的信息的应用程序。它通过编译内存中的源代码,然后对其进行扫描来实现此目的。制作...

c# linq roslyn-code-analysis microsoft.codeanalysis
1个回答
0
投票

[根据.NET Core源,Aggregate方法,AggregateAssemblyInfo.cs,所有AssemblyInfo.cs方法都在System.Linq.csproj程序集中定义(但在.NET Framework中,它们在System.Linq.csproj程序集中)。 >

因此,请尝试仅添加并加载Linq程序集

© www.soinside.com 2019 - 2024. All rights reserved.