2009-04-20 2 views
1

나는 ICSharpCode.SharpZipLib.dll (DLL 자체는 중요하지 않음)과 연결되는 프로젝트를 가지고있다. 프로젝트 출력 중 하나는 직렬화 어셈블리입니다. 이 출력은 Microsoft 도구 인 sgen.exe에 의해 생성됩니다. 이 모든 작업은 SharpZipLib을 내 소스 코드 저장소에 체크인 할 때까지 예상대로 작동하므로 읽기 전용이됩니다. 나는 SharpZipLib 어셈블리를 직접 제작하지 않기 때문에이 바이너리를 체크 인하는 것이 합리적입니다. 그러나 빌드 할 때 sgen이 "액세스 거부"오류로 실패합니다. 여기 SGEN.EXE가 참조 된 어셈블리에 대한 쓰기 권한이 필요한 이유는 무엇입니까?

재현하는 간단한 명령이다

SGEN : error : Could not load file or assembly 'ICSharpCode.SharpZipLib, Version=0.85.1.271, Culture=neutral, PublicKeyToken=1b03e6acf1164f73' or one of its dependencies. Access is denied. 
Done building project "MyProject.csproj" -- FAILED. 

다시,이 오류는 판독 전용 플래그 ICSharpCode 설정되지 않는 경우가 발생하지 않는다 : 여기서

sgen.exe /assembly:.\MyProject.dll /proxytypes /reference:.\ICSharpCode.SharpZipLib.dll 

결과 오류는 .SharpZipLib.dll. 빌드하는 동안 파일을 체크 아웃하는 철학적 이의가 있지만 주위에 방법이없는 것 같습니다. 참조 된 어셈블리가 읽기 전용이면 sgen.exe가 실패합니다.

sgen.exe는 참조 된 어셈블리를 수정하지 않는다는 점에 유의해야합니다. 그렇다면 읽기/쓰기로 열리는 이유는 무엇입니까?

나는 직렬화 어셈블리 생성을 비활성화 할 수 있지만 바람직한 최적화입니다.

참고 : 나는 동적 인보기와 함께 합리적인 클리어 케이스를 사용하고 있습니다. 나는 이것이 적절하다고 생각하지 않지만, 완전을 위해 그것을 포함합니다.

답변

2

오늘 ClearCase 동적보기에서 VS2005 솔루션을 빌드하여 동일한 벽을 공격했습니다. 다행스럽게도 ProcMon은 동적보기 (일반적으로 파란색 화면)로 작업했으며 참조 된 어셈블리를 열 때 SGEN.EXE가 요청한 내용을 확인할 수있었습니다. 실행 액세스가 필요했습니다! 이것은 ClearCase에서 구성 할 수 있으므로 모든 사용자와 빙고에 대해 해당 어셈블리에 대한 실행 권한을 true로 설정합니다!

ProcMon의 실제 행이 여기에 나와 있습니다.

원하는 액세스 : /트래버스, 동기화, 처분 실행 : 오픈, 옵션 : 동기 IO 비 경보, 비 디렉토리 파일은 속성 : N/A, ShareMode :/A

N : 읽기, 삭제 AllocationSize을

어셈블리에 대한 실행 권한을 변경하기 전에 ProcMon에서 SGEN.EXE가보기에서 "ACCESS DENIED"를 받고 있음을 나타 냈습니다. 더 많은 조사를 원할 경우 실행 권한 및 ClearCase보기에 대한 자세한 정보가 웹에서 제공됩니다.

다른 사람이 같은 문제로 고민하고 유일한 해결책을 생각하면 파일을 확인하는 데 도움이되기를 바랍니다.

-Archimedes

+0

'cleartool protect'을 사용하여 권한을 변경할 수 있습니다. – heavyd

1

이것은 sgen.exe에 대한 불필요한 제한 사항처럼 들립니다.

Microsoft Connect의 버그로 신고하는 것이 좋습니다.

관련 문제