2009-12-02 5 views
7

저는 오픈 소스 프로젝트를 관리하고 프로젝트의 바이너리 패키지에서 공개 된 바이너리에 서명하고 싶습니다. Visual Studio csprojsln 파일을 사용하여 프로젝트를 관리 및 빌드하고이 파일을 프로젝트 소스 패키지의 일부로 배포합니다.오픈 소스 프로젝트에서 강력한 이름의 키 쌍을 관리하기위한 권장 방법은 무엇입니까?

내 빌드의 생성 된 바이너리에 서명하고 snk 키 쌍 파일을 배포하지 않으려면 어떻게해야합니까? Visual Studio를 사용하여 어셈블리에 서명하면 각 프로젝트 파일에 이제 키 쌍의 복사본이 필요합니다. 암호로 보호 된 경우에도 키 쌍 배포에 익숙하지 않습니다.

편집는 :

또 다른주의해야 할 점은 어떤 InternalsVisibleToAttribute를 통해 프로젝트 보조금 친구 액세스에서 어셈블리 및 프로젝트 참조를 통해 그 친구를 만들 것입니다. 따라서 이러한 어셈블리는 서명 된 어셈블리를 참조 할 때 강력한 이름을 사용해야합니다. 그러나 키 쌍이 배포되지 않으면 최종 사용자가 소스를 빌드하고 프로젝트 관계를 유지 관리 할 수 ​​있습니까? 임시 키 쌍 파일을 사용하는 경우 InternalsVisibleToAttribute 참조를 깨뜨린 서명 된 어셈블리의 공개 키 토큰이 변경되지 않습니까?

답변

2

Sharptooth's solution은 코드의 어셈블리 참조 만 프로젝트 파일에 인코딩 된 경우 잘 작동합니다. 프로젝트가 InternalsVisibleToAttribute 또는 다른 강력한 방법으로 문자열을 요구하는 다른 방법을 통해 다른 어셈블리를 참조하는 경우 임시 키를 사용하여 repository-sources를 빌드하는 것은 불가능합니다. 이렇게하면 강력한 이름 문자열에있는 공개 키 참조가 변경되어 코드가 중단됩니다.

이것은 내 응용 프로그램의 경우이므로 다른 접근 방식을 채택해야했습니다.

기본적으로 slncsproj 파일을 별도의 폴더 계층 구조에 생성하고 csproj 파일을 다음과 같이 수정했습니다.

  • 원본 소스를 가리키는 모든 파일 참조가 링크로 변환되었습니다.
  • 강력한 이름을 가진 InternalsVisibleToAttribute의 사용을 포함하도록 각 AssemblyInfo.cs 파일을 복사하고 수정했습니다.
  • snk 파일 참조가 상대 경로 (각 프로젝트에 snk 파일을 복사 할 필요가 제거됩니다)

내가 먼저 수동으로이 모든 짓이되도록 각 csproj 파일을 수정,하지만이 할 수있는 것을 깨달았다 간단한 방식으로 자동화 될 수있다. 첫 번째 및 세 번째 단계는 XSLT로 구현 될 수 있습니다. 두 번째 단계는 정규식 검색/바꾸기 기능으로 구현 될 수 있습니다.

지금 두 가지 해결책을 유지해야하므로 이후의 두통을 피하기 위해이 작업을 자동화하는 것이 좋습니다.

리포지토리의 소스는 강력한 이름을 가진 어셈블리를 빌드하지 않습니다. 이는 최종 사용자에게 빌드 제한이나 프로세스를 부과하고 싶지 않기 때문에 좋습니다.

7

키 쌍을 배포하지 마십시오. strongname은 새 버전의 어셈블리가 동일한 게시자에서 제공되는지 확인하기위한 것입니다.

다른 개발자가 프로젝트를 브랜치하려는 경우 자신의 키 쌍을 생성하고 자신의 버전이 자신이 아닌 사용자임을 나타내므로 컴파일 된 것이 아닌 다른 어셈블리가 더 이상로드되지 않습니다. 항상 편리한 것은 아니지만 악의적 인 버전의 어셈블리를 발급 한 사람으로부터 당신을 보호하고 자동으로 배포합니다.

+0

프로젝트 및 솔루션 파일을 배포해야하므로 (서명이 활성화 된 경우) 솔루션을 빌드하는 데 키 쌍이 필요하기 때문에 최종 사용자가 "더미"키 쌍을 배포해야합니까? 프로젝트 파일을 조작하지 않고도 빌드 할 수 있습니까? 서명을 사용하지 않는 프로젝트 파일을 체크인하는 것은 번거롭고, 릴리스가있을 때마다이 설정을 토글해야합니다. –

+2

다음을 수행 할 수 있습니다. .snk 파일이 이미 있는지 확인하는 빌드 단계를 추가하고 필요한 경우 새 파일을 생성하기 위해 sn.exe를 실행하십시오. 그런 다음 다른 사용자의 저장소에서 바로 빌드됩니다. – sharptooth

관련 문제