2012-10-05 2 views
3

Afterthought (PostSharp와 유사)을 사용하여 출력 어셈블리를 수정하여 빌드 변경 사항을 일부 코드에 적용했습니다.MSBuild 빌드 완료 후 IntermediateOutputPath에서 복사

<Target Name="AfterBuild"> 
    <AfterThoughtTask TargetAssembly="$(TargetPath)" AmendWith="$(TargetDir)Amendments.dll" /> 
</Target> 

기본적으로이 말하는 : 빌드 후, Amendments.dll에있는 코드로 출력 어셈블리를 수정하는 프로세스를 실행하는 AfterThoughtTask을 사용하여 현재 내 프로젝트 파일 (약칭 함) 내에서 이런 일이있다. 이 예상대로 잘 작동하고 MyProject\bin\Debug\MyProject.dll MyProject.dll 출력 추가 코드로 수정됩니다.

<PropertyGroup> 
    <OutputPath>SomeOtherProjectLocation\bin\</OutputPath> 
</PropertyGroup> 

그래서 내가했던 모든 출력 경로를 변경할 수 있습니다 :

는 그럼 난 내 프로젝트 파일이 약간 변경합니다. 이제 AfterThoughtTask을 디버그하고 모든 코드가 실행 된 후에 중단 점을 누릅니다. 이 중단 점에서 멈추었을 때 SomeOtherProjectLocation\bin\MyProject.dll 파일 (수정 예정 파일)이 수정 될 것으로 보입니다 (파일 크기가 117kb 대 103kb 인 경우 수정되지 않음). 이 시점에서 일이 잘 진행되는 것처럼 보입니다. 그런 다음 중단 점을 해제하면 갑자기 원래 크기의 파일로 대체되는 파일 크기가 103kb로 다시 떨어집니다. 진단 빌드 보고서를보고 AfterThoughtTask은보고 된 파일 복사본없이 실행 된 마지막 작업입니다.

동일한 중단 점에서 다시 실행하면 IntermediateOutputPath 디렉토리 (obj \ Debug)에있는 파일이 여전히 103kb (unamended)이므로 개정 된 파일을 덮어 쓰는 파일인지 확인하려고합니다. 내가 중단 점에있을 때 (작업 실행 끝이지만 컨트롤이 다시 빌드되기 전에) IntermediateOutputPath 디렉토리의 파일 이름을 MyProject.dll_hidden으로 바꿉니다. 오류는 없지만 내 파일은 더 이상 기록되지 않습니다.

목표 파일을 통해 IntermediateOutputPath 디렉토리에서 파일을 복사한다고 가정 할 수 있지만 빌드 로그에이를 나타내지 않는 것 같습니다. 왜 OutputPath을 변경하면 문제가 발생하는지 이해할 수 없습니다. 이 방법은 전에 기본으로 OutputPath으로 작동하는 방법과 비교합니다. 누구든지 여기에 지침이 있습니까? 미리 감사드립니다.

답변

0

명령 줄을 사용하여 빌드하고 자세한 정보를 diag (/ v : diag)로 설정하십시오. 출력을 로그 파일로 파이프하고 파 내려 간다 - 보통 진단 출력으로 문제의 원인을 쉽게 찾을 수있다 (또는 여기에 로그를 남긴다).

또한 다음을 확인하십시오. - 글로벌 출력 경로를 변경하면 다른 빌드 프로젝트가 해당 폴더에 쓸 것입니다. 변경되지 않은 OutputPath로 빌드하고 프로젝트의 dll이 117kb 크기와 일치하는지 확인하십시오.