2011-02-28 9 views
0

tlbimp을 사용하여 기존 COM DLL에서 자동으로 생성하는 COM Interop DLL이 있습니다. 내가 필요한 것은 파일 버전, 저작권 정보 등 동적 AssemblyCopyrightAttribute을 설정하는 AssemblyBuilder.SetCustomAttribute() API를 사용하여 내가 some sample code을 발견기존 어셈블리에 리소스 추가

에 등

그러나, AssemblyBuilder 예를 들어 DLL의 등록 정보 대화 상자에 정보를 추가하는 것입니다 사용은 AppDomain.CurrentDomain.DefineDynamicAssembly()에서 발생하며 어셈블리 만 생성하는 것으로 보입니다. (실제로, 내 DLL 이름으로 해당 코드를 시도 할 때 내 DLL을 삭제하고 새 DLL을 만듭니다.

기존 어셈블리에 AssemblyBuilder의 인스턴스를 가져 오는 방법이 있습니까?

답변

2

아니요, 근본적으로 잘못된 솔루션을 찾고 있습니다. 탐색기의 세부 정보 탭에 표시된 내용은 실제로 비 관리 리소스입니다. C# 컴파일러는 어셈블리 속성 (/ win32res 컴파일러 옵션)에서 자동으로 생성되지만, interop 어셈블리를 만들 때 이러한 일은 발생하지 않습니다. 또는 AssemblyBuilder를 사용하여 어셈블리를 만들려고합니다.

이 작업을 수행하려면 먼저 ildasm.exe/out을 사용하여 interop 라이브러리를 분해해야합니다. 다음으로 C++ 프로젝트에서 가장 잘 된 버전 리소스를 만들어야합니다. 리소스 편집기를 사용하여 버전 리소스를 추가하십시오. 건물을 만들고 나면 .res 파일을 얻습니다. 그런 다음 ilasm.exe를 사용하여 interop 라이브러리를 다시 만들고/resource 옵션을 사용하여 .res 파일을 포함시킵니다.

시간당 100 마일 버전을 제공해주었습니다. 자동화가 어렵습니다.

+0

관리되는 리소스와 관리되지 않는 리소스 사이의 혼란을 해결해 주셔서 감사합니다. 내 기존 COM DLL에는 이미 버전 리소스가 있으므로이 기술은 매우 간단합니다. 다시 한번 감사드립니다. – feuGene

0

Hans는 관리되지 않는 리소스를 PE 파일에 추가하기 위해 많은 농구계를 뛰어 넘을 필요가 없습니다. 버전 리소스 in-memory을 생성하십시오. 그리 어렵지는 않지만 Win32 BeginUpdateResource & co을 사용하십시오. tlbimp에 의해 생성 된 .exe 파일에이 리소스를 추가하십시오.

+0

문제의 관리되는 DLL에 소스 코드조차 없기 때문에이 솔루션은 저에게 적합하지 않습니다. 따라서 메모리 내 버전 리소스 생성이나 Win32 호출을 할 수있는 곳이 없습니다. – feuGene

+0

나를 오해 한 것 같습니다. 내 솔루션은 Hans '와 동일한 기능을 수행합니다. 관리되지 않는 새 버전 리소스를 어셈블리에 추가합니다. 입력은 어셈블리 파일과 버전 데이터이며 출력은 지정된 버전 데이터가 포함 된 수정 된 어셈블리 파일입니다. –

+0

내가 오해하는 것 같아. 메모리 내 버전 리소스 생성 및 BeginUpdateResource 외의 호출은 어디에서 수행합니까? 이 작업을 수행하는 유틸리티를 작성 하시겠습니까? 리소스를 정의하는 것 외에도 Hans의 솔루션은 추가 프로그래밍이 필요하지 않습니다.이 도구는 꽤 매력적입니다 ... – feuGene

관련 문제