2012-02-17 4 views
7

Visual Studio에서 사용자 지정 도구를 사용할 때 한 파일의 내용을 변경하고 다른 사용자 지정 도구를 트리거 할 수 있으면 해결하려고합니다.Visual Studio에서 한 파일이 다른 사용자 지정 도구를 실행하게 할 수 있습니까? (이 경우 Xsd2Code 사용)

내 시나리오는 이것이다 : 비주얼 스튜디오 C# 프로젝트에서

, 나는 다른 여러 가지 다른 XSD 파일을 포함하는 "master.xsd"XML 스키마를 가지고있다. Xsd2Code Visual Studio 사용자 지정 도구를 사용하여 스키마에서 .cs를 생성합니다. master.xsd 자체가 변경되면 제대로 작동하지만 다른 xsds 중 하나가 변경되면 master.xsd 파일에서 사용자 정의 도구를 실행하고 싶습니다.

한 파일에서 다른 사용자 지정 도구를 트리거하는 방법이 있습니까?

[편집 - 나는 왜 이것에 대한 사용자 지정 도구 사용에 찾고 있어요에 대한 자세한 사항] 현재

우리는 코드 fiels를 생성하는 명령 줄에서 Xsd2Code를 호출하는 GenerateFiles.bat 파일이를 스키마에서 (아래 MattDavey가 제안한 것처럼). 이 방법은 너무 느립니다.

문제는 모든 빌드에서 Xsd2Code가 실행되지만 다른 프로젝트가이 프로젝트에 스키마에 의존하기 때문에 아무 것도 변경되지 않았더라도 모두 다시 컴파일된다는 것입니다. 실용적인 단점은 유닛 테스트의 사소한 변경조차도 재 컴파일하는 프로젝트의 절반을 포함한다는 것입니다. 스키마가 변경된 경우에만 코드 파일을 생성하는 사용자 지정 도구 접근 방식을 살펴 보았습니다.

답변

4

내가 Xsd2Code이 방법을 많이 사용하지만 내 방식은 Xsd2Code 명령 줄을 호출하고 각 빌드에 XML을 재생성하는 빌드 전 이벤트를 추가하는 것입니다 ..

내 빌드 전 이벤트의 모습 이 : 당신은 단지 마스터 XSD에서이 빌드 전 단계를 실행할 수 있습니다 귀하의 경우에는

$(ProjectDir)BuildTools\Xsd2Code.exe $(ProjectDir)Api\Schemas\MySchema.xsd MyProject.Api.Schemas $(ProjectDir)Api\Schemas\MySchema.cs /platform Net40 /collection Array /sc+ /ap+ /if- /xa+ 

(내가 XSD 같은데요 : 다른 스키마를 가져옵니다), 또는 스키마의 각 명령을 실행할 수 있습니다 파일을 개별적으로. 이것에 대한

장점은 내가 XSD 스키마를 변경하면, 나는 매우 유용 컴파일 시간 오류 : 당신에게 몇 가지 아이디어를 제공

희망을 얻을 것입니다!

$(ProjectDir)BuildTools\Xsd2Code.exe $(ProjectDir)Api\Schemas\MySchema.xsd MyProject.Api.Schemas $(ProjectDir)Api\Schemas\MySchema.cs.temp /platform Net40 /collection Array /sc+ /ap+ /if- /xa+ 

fc $(ProjectDir)Api\Schemas\MySchema.cs $(ProjectDir)Api\Schemas\MySchema.cs.temp 

if errorlevel 1 copy $(ProjectDir)Api\Schemas\MySchema.cs.temp $(ProjectDir)Api\Schemas\MySchema.cs /Y 

del $(ProjectDir)Api\Schemas\MySchema.cs.temp 

그래서 Xsd2Code 이제 소스 코드로 생성된다

편집

난 당신이 시간을 구축에 대한 강조 문제에 대해 생각하는 시간을 보냈다 그래서 같은 사전 빌드 스크립트를 수정 임시 파일. 기존 .cs 파일이 다른 경우에만 덮어 씁니다. 이 이어야합니다. .xsd가 전혀 변경되지 않은 경우 생성 된 .cs :

아직 xsd2code를 실행 중입니다.하지만 msbuild 생성 된 소스가 같으면 프로젝트의 전체 체인을 다시 빌드합니다.

+0

제안 해 주셔서 감사합니다. 불행히도, 이것은 우리가 지금하는 방식이며, 너무 느립니다.문제는 모든 빌드에서 Xsd2Code가 실행되지만 다른 프로젝트가이 프로젝트에 스키마에 의존하기 때문에 아무 것도 변경되지 않았더라도 모두 다시 컴파일된다는 것입니다. 이것이 스키마가 변경된 경우에만 코드 파일을 생성하기 위해 사용자 지정 도구 접근 방식을 조사한 이유입니다. 그러나 다른 시나리오에서는 자세하게 접근하는 것이 좋습니다. –

+0

거친 것. 마음에 오는 첫 번째 일은 xsd 파일이 변경되지 않은 xsd2code 단계를 생략하는 것입니다. 여기에는 xsd 파일의 해시를 생성하고 이전에 저장된 해시와 비교하는 다소 복잡한 사전 빌드 일괄 스크립트가 필요할 수 있습니다. 하지만 지금은 추측 일뿐입니다 :) – MattDavey

+0

@RobLevine 편집보기 – MattDavey