나는 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는 참조 된 어셈블리를 수정하지 않는다는 점에 유의해야합니다. 그렇다면 읽기/쓰기로 열리는 이유는 무엇입니까?
나는 직렬화 어셈블리 생성을 비활성화 할 수 있지만 바람직한 최적화입니다.
참고 : 나는 동적 인보기와 함께 합리적인 클리어 케이스를 사용하고 있습니다. 나는 이것이 적절하다고 생각하지 않지만, 완전을 위해 그것을 포함합니다.
'cleartool protect'을 사용하여 권한을 변경할 수 있습니다. – heavyd