2009-12-14 4 views
9

시스템에 등록 된 COM DLL을 사용하는 C# 클래스 라이브러리 프로젝트가 있습니다. 이제는 COM dll을 side-by-side 어셈블리로 배포하려고합니다. 따라서 등록 할 필요가 없으며 dll의 다른 버전을 사용하는 다른 응용 프로그램을 방해 할 필요가 없습니다..NET DLL에 매니페스트를 추가하는 방법은 무엇입니까?

새 항목 추가 메뉴를 사용하여 app.manifest를 C# 프로젝트에 추가했지만 다음에 수행 할 작업을 잘 모르겠습니다. 프로젝트 속성/응용 프로그램/아이콘 및 매니 페스트에서 매니페스트 드롭 다운이 비활성화됩니다. 나는 그걸 어떻게 피할 수 있을지 모른다. 매니페스트 파일을 추가했는데 드롭 다운 목록에없는 이유는 무엇입니까?

나는 C++ 응용 프로그램에서 작동하는 COM dll에 대한 목록을 가지고 있으며, 그대로 유지한다고 생각합니다. 이제 C# 프로젝트의 app.manifest를 편집하는 방법을 알아야합니다. 나는 알려진 좋은 종속 요소를 추가함으로써 시작할 것이다. 그러나 이것을 설정하는 방법에 대한 자습서가 필요합니다. 어디서나 다룰 수있는 것은 아닙니다. 나는 대부분의 애플리케이션에서

+1

exe ​​프로젝트에 매니페스트 박스가 활성화되어있는 것을 확인합니다. 클래스 라이브러리 프로젝트가 매니페스트를 절대 사용하지 않습니까? –

답변

10

확실히 .net dll에 매니페스트를 포함시킬 수 있습니다. 응용 프로그램 매니페스트의 내용이 모두 어셈블리에 적용되는 것은 아니지만 일부는 어셈블리에 적용됩니다. 예를 들어, UAC 항목은 구성 요소 매니페스트에 대해 이해가되지 않지만 assemblyIdentity는 의미가 있습니다.

삽입 : 다음 Mt.exe에 도구를 사용하여

, 당신은 DLL에 매니페스트를 포함 할 수 있습니다

mt.exe -manifest filename.dll.manifest -outputresource:filename.dll;#2 

추출 : 여기

mt.exe -inputresource:filename.dll;#2 -out:filename.dll.extracted.manifest 

가 관련 정보에 대한 링크입니다 :

다른 DLL 내장 예 : http://msdn.microsoft.com/en-us/library/ms235591(v=VS.100).aspx

SxS 연습 : http://msdn.microsoft.com/en-us/library/ms973915.aspx

2

VS2008를 사용하고

는 매니페스트는 일반적으로 EXE 파일/호스트 애플리케이션에 적용되는 -이 하나가 모든 종속 어셈블리와 그 능력이 함께 메쉬 방법을 이해하는 수준이 때문이다.

예를 들어, trustinfo/security/requestedPrivileges/requestedExecutionLevel 요소를 통해 UAC 마커를 설정하는 경우 합법적으로 "나는 우리 모두가 UAC에 대해 알고 있다고"말할 수있는 종속 어셈블리의 경우는 감각.

+0

예 알아 냈습니다. 운영 체제에 의한 명시 적 캐싱에 대해 알고 있습니까? –

+0

죄송합니다. 캐싱에 대해 아는 바가 없습니다. (추측 :로드 타임에 EXE의 리소스를 모두 읽었을 때 모든 캐싱이 투명 해지지는 않습니다. - 그게 간단한 것인지 묻지 않을 것입니다!) –

+2

이것은 사실이 아닙니다. . DLL은 매니페스트를 포함하고 활성화 할 수 있습니다. 활성화 컨텍스트 API를 사용하여 수동으로 수행하면됩니다. –