我正在为我的项目使用ICSharpCode.SharpDevelop库。我正在试图弄清楚如何构造一个DefaultProject实例,以便它具有所有必要的引用。所以,我需要像
这样的东西 projectContent.AddReferencedContent(_projectContentRegistry.GetProjectContentForReference("System.Core", "System.Core"));
除了它不起作用 - GetProjectContentForReference(..)总是返回null,无论我试图为参数提供什么。
答案 0 :(得分:1)
它看起来像是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
您可以使用GacInterop类找到文件名,该类是ICSharpCode.SharpDevelop.Dom程序集的一部分。下面的代码应该返回一个非null的项目内容对象。
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);