Microsoft MVP성태의 닷넷 이야기
윈폼 기반의 응용프로그램 dll 참조와 32,64bit 빌드 관련 문의 [링크 복사], [링크+제목 복사],
조회: 10114
글쓴 사람
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
정성태

... 31  32  33  34  35  36  37  [38]  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4909필승11/5/201710844TextBox에 관해 질문 드립니다. [5]
4908필승11/1/201714217특정 시각에 프로그램 종료 또는 재시작시 오류 발생 [8]
4907심너울10/29/20179794선생님이 쓰신 "시작하세요! C# 7.1~"으로 공부하고 있는데요~ [2]
4906guest10/25/20179360.net core, .net standard 관련해서 궁금합니다 [2]
490510/25/20178645watermark 관련문의 [1]
4903Ho10/25/20179043간단한 서버를 구현해 보고 싶습니다. [2]
4902황재승10/22/201710067C# 7.1 프로그래밍 왕초보자도 이해할 수 있는 수준인가요? [1]
4901김레오10/17/201714739c# 프로그램 난독화 도구인 confuserex라는 도구를 사용하다 여쭙습니다. [2]
4900황준범10/12/201710562ClickOnce 배포관련 질문드립니다. [1]
4899Ques...9/28/201713044C# 프로그램이 "응답 없음" 시에도 계속 독립적으로 돌아가는 타이머 생성법 [3]
4898ssdrm9/27/20179779Clickonce 실행시 보안에 막힙니다 ㅠ [1]
4897김태진9/23/20179978윈도우7 작업관리자의 상세(details)탭 생성에 대해 여쭙습니다. [1]
4896장진국9/19/201711248안녕하세요 WPF 에서 Window객체가 가비지 콜렉션에 의해 수집되지 않는거 같아서 문의드립니다. [1]
4895Ques...9/18/201710945Generic 에 관하여 질문드립니다. [5]
4894얼마전6...9/14/201712808C# 7.1에서 보강된 부분만 PDF로 제공하는 건 아니되나요? [2]
4893BigII9/14/201711908타 언어(JAVA, PHP 등)에서 받은 RSA 개인키 문자열을 이용하여 내용 복호화 가능 여부 [4]
4892Ques...9/13/201710910서브 폼에서는 무거운 작업을해도 속도가 빠를까요 ?? [1]
4891윤현수9/11/201711573Taskbar에 관한 질문입니다. [5]
4890제발9/11/201710082 시작하세요! C# 6.0 프로그래밍 책이 절판됐나요? [5]파일 다운로드1
4889낙낙이9/7/20179516안녕하세요! xsl관련 이야기입니다. [1]
4888heyh...9/6/20179344클릭원스를 수동으로 배포 시 업데이트 할 때 [1]
4887이경현9/4/20179867Windows server 2012 파일 없어짐 현상... [1]
4886질문자9/1/201711774disconnecteditem에 대하여 아시나요? [4]파일 다운로드1
4883솔솔8/30/201710302dataview에서 select한 index 가져오기 [1]
4882user8/30/201712902UI 변경 작업 여러개를 동시에 사용하려면 어떻게 해야되나요 ?? [7]
4884user8/31/20179582    답변글 [답변]: UI 변경 작업 여러개를 동시에 사용하려면 어떻게 해야되나요 ??파일 다운로드1
... 31  32  33  34  35  36  37  [38]  39  40  41  42  43  44  45  ...