Microsoft MVP성태의 닷넷 이야기
윈폼 기반의 응용프로그램 dll 참조와 32,64bit 빌드 관련 문의 [링크 복사], [링크+제목 복사],
조회: 17326
글쓴 사람
Syong (ianstory01 at naver.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

안녕하세요. 윈폼 기반의 응용프로그램에서 dll 참조와 32,64bit 빌드 관련하여 궁금한 점이 있어 문의드립니다.

현재 Visual Studio 2013 버전을 사용중이며, 각종 장치의 dll은 64bit로 작성된 dll을 참조하고 있고,
윈폼에서 사용중인 Custom User Control은 any cpu로 빌드하여 dll 참조하여 사용하고 있습니다.

이 때, 윈폼에의 빌드 플랫폼은 활성(x64)로 설정하고,
플랫폼 대상을 Any CPU로 구성해야만 디자이너 보기에서 해당 컨트롤들이 정상적으로 보이고,
플랫폼 대상을 x64로 구성하면 디자이너 보기에서 해당 컨트롤을 정상적으로 볼 수 없습니다.

이 때 'Any CPU'로 구성한 프로그램은 64비트로 동작하는게 맞는건가요?

궁금증이 생겨 Custom User Control 자체를 x64로 구성해서 빌드한 뒤, 윈폼 플랫폼은 x64로 구성해도 디자이너에서 정상적으로 보이지 않는 증상은 동일합니다.

간단한 문제 같은데, 제가 빌드 플랫폼, 플랫폼 대상 관계와 dll 참조에 관해 명확히 알지 못하는 것 같아 문의드립니다.


[연관 글]






[최초 등록일: ]
[최종 수정일: 4/16/2021]


비밀번호

댓글 작성자
 



2021-04-16 11시09분
AnyCPU는 64비트를 의미하는 것이 아닙니다. AnyCPU의 EXE와 DLL에서의 입장이 다른데요, 우선, AnyCPU EXE인 경우는 실행 중인 운영체제의 플랫폼(x86/x64)에 맞게 실행됩니다. 그리고 AnyCPU DLL인 경우에는, 그 DLL이 로딩된 EXE의 플랫폼(x86/x64)에 맞게 실행됩니다.

"디자이너 보기"에서 안 된다는 것은 비주얼 스튜디오(devenv.exe)가 32비트 프로세스여서 그럴 것입니다. 그래서 AnyCPU로 빌드한 경우에는 32비트 모드로도 로딩이 되는 반면 x64로 지정하면 32비트로 실행 중인 devenv.exe와 맞지 않아 그런 것입니다. 이와 관련해서는 Visual Studio 2019에서도 발생하며, 그나마 WPF의 경우에는 현재 "New WPF XAML Designer for .NET Framework"라는 preview 단계에서 해결중입니다.

XAML Designer
; https://devblogs.microsoft.com/visualstudio/improvements-to-xaml-tooling-in-visual-studio-2019-version-16-7-preview-1/#xaml-designer

사실 이 문제가 크게 부각되지 않는 이유가, DLL은 굳이 x64/x86을 지정할 필요가 없는 경우가 대부분입니다. 위에서도 언급했지만 DLL은 그것이 로딩되는 EXE의 환경을 타므로 설령 x64에서만 동작하는 DLL일지라도 AnyCPU로 빌드해도 무방하기 때문입니다.

재미있는 것은, 마이크로소프트가 EXE 프로젝트에 대해서는 x64로 설정해도 그 안에 있는 폼이나 컨트롤을 정상적으로 designer에서 보여준다는 점입니다. 아마도 InitializeComponent 까지만 실행하면 되기 때문에 임의로 특별한 내부 빌드를 거쳐 로드하는 것이 아닌가 생각됩니다.

참고로, 이 문제는 x64 비트의 비주얼 스튜디오가 나와도 계속될 수 있는 문제입니다. 아마도 그 때는 x86으로 고정한 DLL이 디자이너에서 올라오지 않을 것이고, 사용자는 프로젝트의 성격에 따라 x86 또는 x64 용 비주얼 스튜디오를 선택해서 띄워야 할 것입니다.
정성태
2021-04-16 11시35분
[Syong] 빠른 답변 감사합니다!
제가 말씀하신 것을 이해한바로는 여러 환경에서 동일한 dll을 재활용하여 사용할 때는 EXE 프로그램만 x86/x64 환경에 맞춰서 빌드하고,
재사용하는 dll은 Any CPU로 미리 빌드해두고 재활용하면 문제가 없게 되는 것 같은데 맞을까요??

추가로,
'마이크로소프트가 EXE 프로젝트에 대해서는 x64로 설정해도 그 안에 있는 폼이나 컨트롤을 정상적으로 designer에서 보여준다는 점입니다.'
이 부분에 대해서 단일 프로젝트 내에서 기본 Button Control을 상속한 Custom Control을 UI에 추가하여 확인해본 결과 x64에서는 보여지지 않는데,
말씀하신 사항은 기본 컨트롤을 사용할 때를 말씀하신건가요?
[guest]
2021-04-16 07시53분
답변을 아래의 글에 정리했으니 참고하세요.

x64 DLL 프로젝트의 컨트롤이 Visual Studio의 Designer에서 보이지 않는 문제
; https://www.sysnet.pe.kr/2/0/12602

비주얼 스튜디오 - 상속받은 컨트롤이 디자인 창에서 지원되지 않는 문제
; https://www.sysnet.pe.kr/2/0/12603
정성태
2021-06-19 12시17분
Visual Studio 2022 - Windows Forms 프로젝트의 x86 DLL 컨트롤이 Designer에서 오류가 발생하는 문제
; https://www.sysnet.pe.kr/2/0/12683
정성태

... 91  [92]  93  94  95  96  97 
NoWriterDateCnt.TitleFile(s)
157이용휘4/20/20059252w3ip를 통해서 윈도우 미디어 화을을 올려놓을 서버..
158정성태4/20/20059695    답변글 [답변]: w3ip를 통해서 윈도우 미디어 화을을 올려놓을 서버..
155최성우4/18/200511360[질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
156정성태4/19/200510071    답변글 [답변]: [질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
161최성우4/21/200511162        답변글 [답변]: [답변]: [질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
164정성태4/22/20059977            답변글 [답변]: [답변]: [답변]: [질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
176최성우5/3/200510322                답변글 [답변]: [답변]: [답변]: [답변]: [질문(--),(__)]BHO로 자동 로그인 기능 구현.. 패스워드를 읽어오지를 못합니다.
146안연준4/14/200511040컴포넌트 안에 컴포넌트 삽입? 헐 ! -_-;;
147정성태4/14/20059903    답변글 [답변]: 컴포넌트 안에 컴포넌트 삽입? 헐 ! -_-;;
148안연준4/15/200510278        답변글 [답변]: [답변]: 컴포넌트 안에 컴포넌트 삽입? 헐 ! -_-;; [2]
142김용국4/13/200510084SmartClient 방식에서 이미지(바이너리)파일을 DataBased에 저장하기위한 방안에 대한 문의
143정성태4/14/20059689    답변글 [답변]: SmartClient 방식에서 이미지(바이너리)파일을 DataBased에 저장하기위한 방안에 대한 문의
141김종욱4/12/200510168웹하드 시스템을 ACTIVEX 로 짜고 있습니다
144정성태4/14/20059727    답변글 [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다
149김종욱4/15/20059613        답변글 [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다 [1]
150정성태4/15/20059774            답변글 [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다 [1]
151김종욱4/16/200510069                답변글 [답변]: [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다
152정성태4/16/20059880                    답변글 [답변]: [답변]: [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다
153김종욱4/18/200511595                        답변글 [답변]: [답변]: [답변]: [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다
154정성태4/18/200510869                            답변글 [답변]: [답변]: [답변]: [답변]: [답변]: [답변]: [답변]: 웹하드 시스템을 ACTIVEX 로 짜고 있습니다 [3]
140안연준4/11/20059604Smart Client 에서 오프라인 글 중...의문점
145정성태4/14/20059452    답변글 [답변]: Smart Client 에서 오프라인 글 중...의문점 [1]
134김용국4/6/200514082c# .Net 에 대한 문의좀 ^^ [WinForm 에서 UserControl로 작성된 폼을 호출하려는데....]
135정성태4/6/200512134    답변글 [답변]: c# .Net 에 대한 문의좀 ^^ [WinForm 에서 UserControl로 작성된 폼을 호출하려는데....]
136김용국4/6/200510942        답변글 [답변]: [답변]: c# .Net 에 대한 문의좀 ^^ [WinForm 에서 UserControl로 작성된 폼을 호출하려는데....]
137정성태4/7/200510076            답변글 [답변]: [답변]: [답변]: c# .Net 에 대한 문의좀 ^^ [WinForm 에서 UserControl로 작성된 폼을 호출하려는데....]
... 91  [92]  93  94  95  96  97