2015-01-22 2 views
0

비주얼 스튜디오 프로젝트에서 프로젝트 참조를 업데이트하는 방법 : DEV에 지점을 생성합니다 a.csproj에 작업을해야하고 그들이에서 작동합니다프로그래밍 나는 다음과 같은 파일 구조가

- binaries 
    - binary1.dll 
- dev 
    - <developer-name> 
     - a.csproj 
-trunk 
    - a.csproj 

개발자 그곳에. 우리 프로젝트는 바이너리 디렉토리에 binary1.dll에 대한 참조가 있어야합니다.

참조가 상대 경로 (Visual Studio 기본값) 인 경우 경로는 트렁크의 프로젝트와 개발자 분기의 프로젝트에서 작동하지 않습니다.

내가 환경 변수를 만드는 대신 프로젝트 파일에 그것을 사용하는 생각이 문제를 해결하려면 다음이 완벽하게 작동

<Reference Include="binary1"> 
    <HintPath>$(MY_ENV_VAR)\binary1.dll</HintPath> 
</Reference> 

,하지만 난 개발자가보다 쉽게 ​​참조를 추가 할 수 있도록하고 싶었다, 그래서 나는 썼다 binary1.dll을 가리키는 상대 경로를 변환하는 프로그램 (예 : dev 브랜치 a.csproj에서 ../../binaries/binary1.dll$(MY_ENV_VAR)\binary1.dll으로 바꿀 것입니다.)하지만 작동시키는 방법을 알아 내지 못했습니다.

사전 빌드 이벤트를 사용하면 프로젝트가 이미 메모리에로드되어 프로젝트 파일을 쓸 수 없기 때문에 이벤트가 오류를 반환합니다.

그럼 내가 MSBuild를 목표를 무시할 수 있다는 것을 깨달았 대상으로 시도 : BeforeCompiler, AfterCompiler, BeforeBuild, AfterBuild를 그들 모두에서 프로젝트가 이미 잠겨 있습니다.

그럼 나는 this answer을 만났으며 GenerateApplicationManifest 타겟에서 실행 파일을 호출하도록 코드를 수정했지만 그 코드는 실행 파일을 전혀 호출하지 않는 것 같습니다.

내가 놀아 왔던 몇 가지 다른 아이디어는 두 번째 프로젝트의 업데이트를 수행하고 두 번째 프로젝트를 연결하는 새 프로젝트를 만드는 것이지만 프로젝트 수를 복제합니다.

트렁크 깊이를 변경할 수도 있지만 문제를 숨기고 실제로 해결하지는 못합니다. 개발자가 dev 브랜치 내에서 다른 기능이나 버그를 처리하기 위해 브랜치를 작성하면 같은 문제가 다시 발생합니다.

좀 더 우아한 방법으로 해결할 수있는 또 다른 기능이있을 수 있지만 아무것도 찾을 수 없었습니다.

그럼 내 질문 : CS 프로젝트를 수정하기 위해 MS Build 또는 사전 빌드 이벤트를 얻으려면 어떻게해야합니까?

+0

당신은 단순히 DLL을 복사하지 왜 자동으로 동일한 DLL – Franck

+0

의 다른 버전을 사용하는 프로젝트의 참조 경로를 설정하고 다른 폴더로 변경해야한다 : 나는 포함 a.csproj을 수정 결국 너 언제 갈래? – DLeh

+0

@DLeh 왜냐하면 나는 수십 개의 DLL 사본을 만들고 라이브러리를 새 버전으로 업데이트한다는 것은 SCC 서버의 모든 파일을 검토하고 모든 파일을 변경했음을 의미하기 때문입니다. – Magus

답변

0

이 방법이 있습니다. 문제는 Visual Studio 프로세스 자체가 프로젝트를 잠그고 있지만 Visual Studio에서 파일을 덮어 쓸 수 있다는 것입니다. DLL에 대한

<Target Name="BeforeBuild"> 
    <Exec Command="UpdateReferences.exe" /> <!-- This creates the $(ProjectPath).new file --> 
    <Move SourceFiles="$(ProjectPath).new" DestinationFiles="$(ProjectPath)" /> 
    </Target> 
+0

좋은 해결 방법 ......... – granadaCoder

관련 문제