它看起来像 SharpDevelop 4.x 中的 ProjectContentRegistry 类中的一个错误。如果您调试 GetProjectContentForReference() 方法,那么您可以看到它在错误的 GAC 文件夹中查找。它正在文件夹中查找
System.Core\4.0.0.0__b77a5c561934e089\System.Core.dll
什么时候应该在文件夹中查找
System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll
我怀疑这个错误没有被注意到,因为 SharpDevelop 现在使用 MSBuild 来计算程序集引用的位置。以 System.Core 为例,它将根据项目的目标框架在参考程序集文件夹中找到程序集:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Core.dll
您可以做的是使用作为 ICSharpCode.SharpDevelop.Dom 程序集一部分的 GacInterop 类查找文件名。下面的代码应该返回一个非空的项目内容对象。
var reference = new DomAssemblyName("System.Core");
reference = GacInterop.FindBestMatchingAssemblyName(reference);
string fileName = GacInterop.FindAssemblyInNetGac(reference);
var registry = new ProjectContentRegistry();
IProjectContent pc = registry.GetProjectContentForReference("System.Core", fileName);