2009-04-20 2 views
0

어셈블리를 관리하는 데있어 많은 정보를 찾을 수 없습니다. (이미 Win32 리소스와이를 변경하기위한 API에 익숙합니다.)CLR 어셈블리의 리소스를 추가, 삭제 및 업데이트하는 방법은 무엇입니까?

내 응용 프로그램에는 최종 사용자가 업데이트해야하는 리소스가 있으며 응용 프로그램은 단일 실행 파일로 배포되므로 (위성 어셈블리 만 사용할 수는 없습니다)

나는 몇 가지 가능한 해결 방법을 볼 수 있지만, 그들은 hackish 보인다 :

첫 번째는 사용 ILMerge이다 : 나는 새로운 자원이 포함되어 메모리 새 어셈블리를 생성하고 그것을 결합 ILMerge를 사용하십시오 원래의 어셈블리를 사용하여 새로운 프로그램을 구성하십시오. 유일한 단점은 리소스를 업데이트하거나 삭제할 수 없다는 것입니다.

두 번째는 다소 비슷합니다 : .netmodule (C# 컴파일러에서 방출 됨)이 있습니다.이 모듈은/embed 스위치가있는 al.exe에 대해 실행되어 새 어셈블리를 형성하기위한 리소스를 추가합니다. 단점은 원본 어셈블리의 리소스가 전혀 존재하지 않는다는 것입니다.

ILMerge 옵션에 기대고 있지만, 재배포에 대한 용어는 모호합니다. 최종 사용자 사용권 계약은 재배포 권한에 대한 언급을하지 않습니다. 따라서 Microsoft Research 페이지에서는 재배포가 허용되지 않는다고 말합니다. (그러나 상업적 재배포를 언급하는 것으로부터 알 수있는 말로는 모호한 말입니다. 이것은 비영리 GPL 프로젝트이므로 나에게는 적용되지 않습니다).

감사

답변

1

IMHO, 나는 어쨌든 그것을 할 수있는 좋은 아이디어라고 생각하지 않습니다. 이 리소스가 실제로 사용자 데이터 인 경우 "미리 설치된"세트가 있어도 포함 된 리소스에 속하지 않습니다.

어셈블리에 서명 했습니까? 변경 후 사임해야하며 비공개 키가 노출되며 모든 사람이 신청서에 서명 할 수 있습니다. 따라서 서명 할 가치가 없으며 어쨌든 보안 위험이 있습니다.

리소스를 외부 파일로 이동하십시오. "미리 정의 된"리소스는 여전히 포함시킬 수 있습니다. 응용 프로그램을 처음 시작할 때 외부 파일을 만들고 포함 된 리소스를 외부 파일에 복사합니다. 외부 파일이있는 경우 더 이상 포함 된 리소스를 신경 쓰지 않습니다.

관련 문제