使用SharpDevelop库,如何添加对项目的引用?
问题描述:
我为我的项目使用ICSharpCode.SharpDevelop库。我想弄清楚如何构造一个DefaultProject的实例,以便它具有所有必要的引用。所以,我需要像使用SharpDevelop库,如何添加对项目的引用?
projectContent.AddReferencedContent(_projectContentRegistry.GetProjectContentForReference("System.Core", "System.Core"));
除了它不工作 - GetProjectContentForReference(..)始终返回null,不管我试图提供的参数。
答
它看起来像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程序集。下面的代码应该返回一个非空的项目内容对象。
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);