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
으로 작동하는 방법과 비교합니다. 누구든지 여기에 지침이 있습니까? 미리 감사드립니다.