【问题标题】:Using a SharpDevelop library, how do I add a reference to a project?使用 SharpDevelop 库,如何添加对项目的引用?
【发布时间】:2013-03-24 18:47:58
【问题描述】:

我正在为我的项目使用 ICSharpCode.SharpDevelop 库。我试图弄清楚如何构造 DefaultProject 的实例,以便它具有所有必要的引用。所以,我需要类似的东西

 projectContent.AddReferencedContent(_projectContentRegistry.GetProjectContentForReference("System.Core", "System.Core"));

除非它不起作用——无论我试图为参数提供什么,GetProjectContentForReference(..) 总是返回 null。

【问题讨论】:

    标签: sharpdevelop


    【解决方案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
    

    您可以改为使用作为 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 2018-01-25
      • 1970-01-01
      • 2017-06-18
      相关资源
      最近更新 更多