Microsoft MVP성태의 닷넷 이야기
글쓴 사람
롬메달 (pjh2104 at gmail.com)
홈페이지
첨부 파일
 

메인어플리케이션(1)에서 어셈블리를 LoadFrom이나 LoadFile로 객체를 얻어옵니다.(2)
그렇게 해서 사용되는 모듈에서는 또다른 외부 어셈블리(3)를 사용합니다.

하지만 2의 모듈에서는 3을 프로젝트 참조에 넣고 사용했었기 때문에 별 문제없이 빌드 됐었습니다.
문제는 1과 2,3이 다른 디렉토리에 있다는 겁니다. 1의 하위 디렉토리에 2,3의 어셈블리가 없고, 2와 3은 같은 디렉토리에 존재합니다.

또한 2의 모듈 내부의 다양한 클래스에서 3을 사용하고 멤버변수로 3의 특정 클래스를 사용하고 이렇게 커플링 되어 있어 LoadFrom이나 LoadFile로 객체를 얻어와서 사용할 수 없는 실정입니다.

프로그램 실행시에는 2의 내부에서 3의 클래스명이 나오는 메서드나 클래스를 들어가게 되면 여지없이 어셈블리참조에러로 인한 Exception이 발생합니다.

어셈블리 안의 appbase 경로는 메인어플리케이션으로 되어 있습니다.
appbase 경로를 추가로 줄수 있는지?(아니면 변경 할수 있는지? 물른 그럼 기존의 메인어플리케이션이 필요로 하는 어셈블리 객체를 얻지 못하겠지요)

아니면 어떻게 해야 2의 내부에서 사용되는 3의 모듈을 자유자재로 사용할 수 있을까요?

/////

코드상에서 문제가 되는 부분은 이렇습니다.
(2)의 모듈내의 코드에서 (3)의 클래스명이 나오는 메서드로 들어가는 순간 어셈블리 참조 Exception이 발생합니다.








[최초 등록일: ]
[최종 수정일: 2/14/2013]


비밀번호

댓글 작성자
 



2013-02-14 11시57분
[ryujh] 안녕하세요.
제가 이런 경우가 없어서 정확하게 말씀드릴 수가 없지만

마지막 질문에 대한 답변은 3모듈을 프로젝트에서 '강력한 이름' 을 만들고 빌드 후 GAC에 등록하는 것은 어떨지요?

그런데 현재 문제가 1모듈을 기준으로 참조하려하니 3모듈을 못찾아서 에러가 난다는 것인가요?
그러면 3모듈을 1모듈에도 복사해두는 것도 해보시길 바랍니다.

이상입니다.

[guest]
2013-02-15 12시48분
[롬메달] [ryujh]님 감사합니다.
3 모듈을 GAC에 등록할 정도의 의미는 아니라서, 프로그램에서 아주잠깐 쓰이는것 때문에 등록하는건 정책상 안맞다고 보고 아직 하지 않았구요.

3모듈을 1모듈에 복사해서 쓰면 상관은 없는데, 3 모듈은 2모듈과 함께 사용되는것으로 1 프로그램과는 독립적인 하나의 컴포넌트로 사용하려는게 정책이었습니다.

댓글 감사합니다. 일단 제가 질문한 답은 불가능한것으로 잠정적으로 보고 있습니다.

실행 어셈블리의 appbase에서도 벗어난 경우라서요.
[guest]
2013-02-15 03시11분
제가 테스트 해본 바에 의하면 LoadFile인 경우에는 2에서 3을 자동으로 로드하지 못하지만, LoadFrom의 경우에는 자동으로 됩니다. 제가 테스트 한 예제가 롬메달님의 상황과 뭔가 다른 부분이 있는 것 같은데요. 혹시, 위의 문제가 재현되는 간단한 솔루션/프로젝트를 보내주실 수 있나요?

참고로, 자동 로드가 안된다면 AppDomain.AssemblyLoad 이벤트를 구독한 후, Load 실패한 어셈블리를 수작업으로 로드해주는 것도 방법입니다.
정성태
2013-02-15 03시15분
[롬메달] 네......LoadFrom으로 다시 되더군요.....
일단 그렇게 처리하는걸로 잠정적으로 결론내렸습니다.
일단 LoadFile과 LoadFrom에 대한 차이와 이해를 해야할것 같아서 확인중이었습니다.
감사합니다...ㅠ
[guest]
2013-02-16 04시17분
[엄준일] assemblyBinding/probing probingParh 설정은 어떨까요?
[guest]
2013-02-16 05시17분
privatePath 는 반드시 EXE 파일이 위치한 (정확히는 AppDomain.CurrentDomain.BaseDirectory) 폴더의 하위만 지정할 수 있다는 단점이 있습니다. ^^
정성태
2013-02-16 05시25분
[롬메달] 네 그게 어셈블리의 appbase에 대한 내용인데 2,3 모듈은 어플리케이션의 같은 레벨의 다른 폴더에 위치해 있었기 때문에 appbase범위를 벗어났었거든요.
appbase 범위를 벗어나면 위치를 지정해 줘도 불가능하다고 나옵니다.
[guest]
2013-02-20 06시47분
[윤용한] 제가 사용한 방법은
runtime/assemblyBinding/probing/@privatePath에 하위경로 몇개 지정하고,
이 하위 경로들을 symbolic link로 만들어서 로드하면 됩니다.
symbolic link를 만드는 툴은
Junction (http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx)
[guest]

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