2010-03-26 4 views
0

나는 이것을 위해 명령 줄을 피하고 싶다. I는 다음과 같습니다 코드로 MSBuild에서의 API (Microsoft.Build.FrameworkMicrosoft.Build.BuildEngine)를 사용하고있다 : 나는 정말 궁금하네요 그것에 대한 답을 찾을 수없는 충분한 문제로 실행했습니다 그러나코드에서 csproj 파일을 빌드하는 효과적인 방법은 무엇입니까?

this.buildEngine = new Engine(); 
BuildPropertyGroup props = new BuildPropertyGroup(); 
props.SetProperty("Configuration", "Debug"); 
this.buildEngine.RegisterLogger(this.logger); 
Project proj = new Project(this.buildEngine); 
proj.LoadXml(this.projectFileAndPath, ProjectLoadSettings.None); 
this.buildEngine.BuildProject(proj, "Build"); 

내가이 일을 제대로한다면. 첫째, 출력을 찾을 수 없습니다. (dll이 끝날 것이라고 생각한 장소에 bin 디렉토리가 없습니다.) 둘째, VS2008에서 만든 프로젝트를 구축하려고 시도했는데 proj.LoadXml( 라인이 잘못된 xml 인코딩으로 인해 실패합니다. 물론 xml 파일은 VS2008이 빌드 할 수 있기 때문에 유효합니다 (확인).

이 시점에서 필자는 오래된 코드이거나 다른 방법으로 대체 된 방법론을 선택했는지 궁금해하기 시작했습니다. 의견?

+0

궁금한데 왜 코드에서 .csproj 파일을 만들어야합니까? –

+0

여기에 같은 질문이 있습니다. 왜 훌륭한 msbuild exe를 사용하지 않았습니까? 코드에서 트리거 할 수도 있습니다. –

+0

@Andy : 예외 처리가 가장 먼저 떠오른다. 나는이 API가 msbuild가 사용하는 것과 동일한 코드 집합이라고 생각하여 왜 중간 남자를 잘라 내지 않습니까? – jcollum

답변

1

LoadXml() 메서드는 파일 경로가 아닌 xml이 포함 된 문자열을 필요로합니다. Load() 메서드를 대신 사용하십시오.

아니요, Microsoft.Build 네임 스페이스에 대한 최신 정보가 없습니다. 3.5 버전을 사용하고 있다고 가정합니다.

+0

/headslap; 지금 나는 바보 같아. – jcollum

+0

나는 아직도 그 출력이 어디로가는 지 막혔습니다. 나는 성공적으로 이전에 빌드하도록 만들었지 만 (최종 결과가 IlMerge로 들어가서 .NET 프레임 워크 위치를 해결하는 데 어려움이 있었기 때문에이 코드로 변경해야했지만 ...) 실제 출력은 없었습니다. – jcollum

관련 문제