2013-03-23 3 views
0

내 프로젝트에 ICSharpCode.SharpDevelop 라이브러리를 사용하고 있습니다. DefaultProject의 인스턴스를 생성하여 필요한 모든 참조를 생성하는 방법을 파악하려고합니다. GetProjectContentForReference (..)를 항상 내가 인수를 제공하기 위해 노력하고있어 어떤 null을 반환 - 그래서, 나는 그것이 작동하지 않는 것을 제외하고SharpDevelop 라이브러리를 사용하면 어떻게 프로젝트에 참조를 추가 할 수 있습니까?

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

뭔가를해야합니다.

답변

1

SharpDevelop 4.x의 ProjectContentRegistry 클래스의 버그처럼 보입니다. GetProjectContentForReference() 메서드를 디버깅하면 잘못된 GAC 폴더가 찾고 있음을 알 수 있습니다. 이 폴더 내가 SharpDevelop 지금 어셈블리 참조의 위치를 ​​일의 MSBuild를 사용하기 때문에이 버그가 발견되지 않은 의심

System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll 

에보고해야 할 때 폴더

System.Core\4.0.0.0__b77a5c561934e089\System.Core.dll 

에서 찾고 있습니다. System.Core으로 예를 들어이 프로젝트의 대상 프레임 워크를 기반으로 참조 어셈블리 폴더에있는 어셈블리를 찾을 수 있습니다 :

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Core.dll 

은 당신이 대신 할 수있는 것은 ICSharpCode의 일부인 GacInterop 클래스를 사용하여 파일 이름을 찾을 수 있습니다. 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); 
관련 문제