Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)
(시리즈 글이 4개 있습니다.)
닷넷: 2170. .NET Core/5+ 기반의 COM Server를 tlb 파일을 생성하는 방법(tlbexp)
; https://www.sysnet.pe.kr/2/0/13458

닷넷: 2171. .NET Core 3/5+ 기반의 COM Server를 기존의 regasm처럼 등록하는 방법
; https://www.sysnet.pe.kr/2/0/13459

닷넷: 2172. .NET 6+ 기반의 COM Server 내에 Type Library를 내장하는 방법
; https://www.sysnet.pe.kr/2/0/13460

닷넷: 2173. .NET Core 3/5+ 기반의 COM Server를 registry 등록 없이 사용하는 방법
; https://www.sysnet.pe.kr/2/0/13461




.NET Core/5+ 기반의 COM Server를 tlb 파일을 생성하는 방법(tlbexp)

예전에 작성한 COM 개체를,

C# COM 개체를 C++에서 사용하는 예제
; https://www.sysnet.pe.kr/2/0/12791

.NET Core/5+ 프로젝트로 마이그레이션한 다음,

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>net8.0-windows</TargetFramework>
        <OutputType>Library</OutputType>
        <UseWindowsForms>true</UseWindowsForms>
        <ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
        <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    </PropertyGroup>
    <PropertyGroup>
        <SignAssembly>true</SignAssembly>
    </PropertyGroup>
    <PropertyGroup>
        <AssemblyOriginatorKeyFile>test.snk</AssemblyOriginatorKeyFile>
    </PropertyGroup>
</Project>

tlbexp.exe를 이용해 tlb 파일을 만들려고 했더니 이런 오류가 발생합니다.

C:\temp\cs_com_dll_cpp_sample\ClassLibrary1\bin\Debug> tlbexp ClassLibrary1.dll /win64
Microsoft (R) .NET Framework Assembly to Type Library Converter 4.8.3928.0
Copyright (C) Microsoft Corporation. All rights reserved.
TlbExp : warning TX00131175 : When cross-compiling, all type library references should be included on the command line to ensure the correct bit-specific type libraries are loaded.
TlbExp : error TX0000 : Type library exporter encountered an error while processing 'ClassLibrary1.MyNetCode, ClassLibrary1'. Error: Type library exporter cannot load type 'ClassLibrary1.MyNetCode' (error: Could not load file or assembly 'System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. (Exception from HRESULT: 0x80070002)).


다행히 검색해 보면 해결책이 나오는데요, ^^

What is the path for tblexp in a .NET core project?
; https://stackoverflow.com/questions/68474473/what-is-the-path-for-tblexp-in-a-net-core-project

원인인즉, .NET Framework 기반의 tlbexp.exe가 .NET Core/5+ 기반의 ClassLibrary1.dll을 로드하면서 그것이 의존한 (.NET Core/5+ 전용의) System.Runtime을 찾지 못해서 발생하는 것이었습니다.

따라서, tlbexp 역시 .NET Core/5+로 빌드된 프로세스를 사용해야 하는데, 이게 기본적으로 .NET SDK에 포함돼 있지 않아서 다음과 같이 명시적으로 설치해야만 합니다.

dotnet tool install -g dscom

이제부턴, ^^ "절대 경로"를 이용해 tlb 파일을 구할 수 있습니다.

C:\temp\cs_com_dll_cpp_sample\ClassLibrary1\bin\Debug> dscom tlbexport ClassLibrary1.dll
Failed to export type library. Path "ClassLibrary1.dll" is not an absolute path. (Parameter 'assemblyPath')

C:\temp\cs_com_dll_cpp_sample\ClassLibrary1\bin\Debug> SET cur_dir=%cd%
C:\temp\cs_com_dll_cpp_sample\ClassLibrary1\bin\Debug> ECHO %cur_dir%\ClassLibrary1.dll
C:\temp\cs_com_dll_cpp_sample\ClassLibrary1\bin\Debug\ClassLibrary1.dll

C:\temp\cs_com_dll_cpp_sample\ClassLibrary1\bin\Debug> dscom tlbexport "%cur_dir%\ClassLibrary1.dll"
[...정상 등록 시 Console 출력은 없고, tlb 파일만 생성...]




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 11/26/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  160  161  162  [163]  164  165  ...
NoWriterDateCnt.TitleFile(s)
972정성태1/7/201124211개발 환경 구성: 95. SQL Server 2008 R2 이하 버전 정보 확인
971정성태1/5/201133783.NET Framework: 199. .NET 코드 - Named Pipe 닷넷 서버와 VC++ 클라이언트 제작 [2]파일 다운로드1
970정성태1/4/201134315.NET Framework: 198. 윈도우 응용 프로그램에 Facebook 로그인 연동 [1]파일 다운로드1
969정성태12/31/201040400VC++: 45. Winsock 2 Layered Service Provider - Visual Studio 2010용 프로젝트 [1]파일 다운로드1
968정성태12/30/201026679개발 환경 구성: 94. 개발자가 선택할 수 있는 윈도우에서의 네트워크 프로그래밍 기술 [2]
967정성태12/27/201028430.NET Framework: 197. .NET 코드 - 단일 Process 실행파일 다운로드1
966정성태12/26/201026380.NET Framework: 196. .NET 코드 - 창 흔드는 효과파일 다운로드1
965정성태12/25/201027898개발 환경 구성: 93. MSBuild를 이용한 닷넷 응용프로그램의 다중 어셈블리 출력 빌드파일 다운로드1
964정성태12/21/2010143064개발 환경 구성: 92. 윈도우 서버 환경에서, 최대 생성 가능한 소켓(socket) 연결 수는 얼마일까? [14]
963정성태12/13/201027934개발 환경 구성: 91. MSBuild를 이용한 닷넷 응용프로그램의 플랫폼(x86/x64)별 빌드 [2]파일 다운로드1
962정성태12/10/201022766오류 유형: 110. GAC 등록 - Failure adding assembly to the cache: Invalid file or assembly name.
961정성태12/10/201099817개발 환경 구성: 90. 닷넷에서 접근해보는 PostgreSQL DB [5]
960정성태12/8/201045147.NET Framework: 195. .NET에서 코어(Core) 관련 CPU 정보 알아내는 방법파일 다운로드1
959정성태12/8/201031962.NET Framework: 194. Facebook 연동 - API Error Description: Invalid OAuth 2.0 Access Token
958정성태12/7/201028975개발 환경 구성: 89. 배치(batch) 파일에서 또 다른 배치 파일을 동기 방식으로 실행 및 반환값 얻기 [2]
957정성태12/6/201031724디버깅 기술: 31. Windbg - Visual Studio 디버그 상태에서 종료해 버리는 응용 프로그램 [3]
953정성태11/28/201036952.NET Framework: 193. 페이스북(Facebook) 계정으로 로그인하는 C# 웹 사이트 제작 [5]
952정성태11/25/201025367.NET Framework: 192. GC의 부하는 상대적인 것! [4]
950정성태11/18/201076733.NET Framework: 191. ClickOnce - 관리자 권한 상승하는 방법 [17]파일 다운로드2
954정성태11/29/201048727    답변글 .NET Framework: 191.1. [답변] 클릭원스 - 요청한 작업을 수행하려면 권한 상승이 필요합니다. (Exception from HRESULT: 0x800702E4) [2]
949정성태11/16/201027261오류 유형: 109. System.ServiceModel.Security.SecurityNegotiationException
948정성태11/16/201036113.NET Framework: 190. 트위터 계정으로 로그인하는 C# 웹 사이트 제작 [7]파일 다운로드1
947정성태11/14/201041705.NET Framework: 189. Mono Cecil로 만들어 보는 .NET Decompiler [1]파일 다운로드1
946정성태11/11/201041570.NET Framework: 188. .NET 64비트 응용 프로그램에서 왜 (2GB) OutOfMemoryException 예외가 발생할까? [1]파일 다운로드1
945정성태11/11/201025069VC++: 44. C++/CLI 컴파일 오류 - error C4368: mixed types are not supported
944정성태11/11/201031603VC++: 43. C++/CLI 컴파일 오류 - error C2872: 'IServiceProvider' : ambiguous symbol could be ...
... 151  152  153  154  155  156  157  158  159  160  161  162  [163]  164  165  ...