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

... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...
NoWriterDateCnt.TitleFile(s)
239장강현9/14/200514978SmartClient에서의 배포 문제에 대해 [2]
238이순원9/13/200510345디버깅 할때 native 옵션껐는데두 너무 느려요.. [1]
236코디9/12/200510295[질문]런타임 보안 배포 [1]
237코디9/13/200510844    답변글 [재질문]: [질문]런타임 보안 배포 [1]파일 다운로드1
235임은선9/9/200512912스마트 클라이언트 배포시 환경파일인 app.config는 어떻게 배포 해야하나요...? [2]
234임은선9/7/200511667스마트 클라이언트 보안문제관련해서 질문이 있습니다.. [2]
233이한욱8/31/200519731가상 시리얼 포트(Virtual COM Port) 만들기 [1]
232정준명8/30/200511358[질문] HTTP 모듈/핸들러 또는 RewriteURL 관련입니다. [4]
231이진일8/30/200510478참조한 dll 들은 어떻게 배포하나요...? [1]
2303028/29/200511281[질문] 웹에서 Exchange Server 사용자 추가 [2]
229김재명8/26/200510950성태님의 홈페이지 J & J의경우 보안모듈을 어떻게 해결하셨는지 궁금합니다. [1]
227임규진8/24/200510771리소스 파일에 그림 첨가하는 방법 좀 알려 주세요. [1]
226최인호8/19/200510812스마트 클라이언트 exe 버젼 실행시 시간이 너무 오래 걸립니다. [1]
225코디8/17/200510981[질문]닷넷프레임워크 설치여부 [1]
224박준현8/17/200510569[질문]중첩 그리드라고 해야 할까요? [1]
223매커7/28/20059977강좌 잘 읽었습니다. [1]
222김지영7/27/200511476C#에서 oledb 사용하다가 에러 [2]
221박민우7/26/200512023스마트클라이언트에서의 DB접속 [1]
220테드7/22/200510935스마트 클라이언트에서 원치 않는 패킷 송수신 문제... [3]
219김종욱7/21/200511447안녕하세요... 툴밴드 콤보 박스에 대해.. [1]
2187/21/200510085스마트 클라이언트에 대한 질문 입니다. [1]파일 다운로드1
217왕초보7/21/200510704마소강좌의 AxForSmartClient 를 실행시키고 싶은데요... [1]
215궁금증6/23/200510174도대체 이게 무슨 에러 일까요... [1]
213궁금이6/18/200511854Winform 형태의 NTD에서 사용자 로그인 성공 여부 정보 유지하는 방법 [1]
212궁금이6/16/20059860ActiveX 컨트롤이 NTD에 이상이 없는지요? [1]
211류성태6/15/200510397smart client에 관하여.... [1]
... 76  77  78  79  80  81  82  83  84  85  86  87  88  [89]  90  ...