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

[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5968orion4/30/2025173winform DataSet.xsd의 암호화 된 ConnectionString 사용 질문 [1]
5966GM B4/30/2025190C#과 python 연동 질문 [1]
5962SunN...4/21/2025533Contextmenu margin 조절 [1]파일 다운로드2
5961GM B4/10/2025936winform => wpf 마이그레이션 방법 질문 [4]파일 다운로드1
5960Kim ...4/9/20251183안녕하세요.. 혹 AI & C# 에 대해서도 다루시나요? [1]
5959vict...2/10/20251881비주얼 스투디오 CLR 코드 탑색 질문입니다. [1]
5958Supe...1/18/20252857C#으로 DLL을 만들때 WebVeiw2을 이용하여 Vb6에서 사용할수 있는지 문의드립니다. [2]
5956fc1/11/20252858한국투자증권 KIS Developers OpenAPI의 C# 래퍼 버전 - eFriendOpenAPI NuGet 패키지 [1]
5955tree...11/8/20244507C#12 책 179 페이지 문의 사항 [2]
5954SunN...10/10/20244974textbox에서 글자입력후 textBox1_KeyUp함수에서listBox1_SelectedIndexChanged 강제호출방법 [1]
5953Roya10/4/20244925c# com host dll을 c++에서 사용할 때, sdk 관련 runtime 을 설치 안하고 제공할수 있을까요?? [1]
5952우광현9/5/20246072서버용 소켓 포트 동적포트 적용시 클라이언트가 호출하는 방법? [2]
5951Kun ...8/21/20245682c++에서 복합데이터 Struct를 .NET Framework에서 구현할 수 있는 방법이 있을까요? [2]
5950SunN...8/18/20246239정석대로 한다면 response.Close() 해야되는지요? [4]
5949SunN...8/16/20246327SqlConnection Open()에서 에러가나면 Close()하는 시점 [3]
5948SunN...8/14/20246206WebRequestMethods.Ftp.MakeDirectory 해제 [3]
5947Roya8/7/20246986c# dll을 cpp lib에서 사용을 할려고 하는데요. CoCreateInstance 에서 지정된 파일을 찾을수 없다고 나오는대요. [4]
5946SunN...8/5/20247092TaskDefinition 에서 사용저가로그온상관없이실행 [3]파일 다운로드1
5945SunN...8/3/20246956윈도우 작업스케줄러 [1]
5944roya8/1/20246902C# dll을 C++ 프로젝트에서 사용을 하고 싶은데, 레지스트리 등록 없이 가능한걸까요?? [2]
5943SunN...8/1/20246765윈도우C#에서 리눅스FTP로 업로드 및 리눅스에 폴더생성(WindowsOS에서C#으로) [3]
5942vict...7/24/20246810dll 을 c#에서 쓰고 싶습니다 [1]
5941vict...7/17/20248291DependencyObject와 같은 스레드에서 DependencySource를 만들어야 합니다. 오류 [2]
5940ckm7/16/20248709선생님 안녕하세요 async await 교착 관련 질문입니다 [1]
5939괴물신인7/9/20248412템플릿 대체할수있는방법이 있을까요? [6]
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...