[ C# ] Assembly 가져오는 방법이 궁금합니다.

메인 프로젝트에서 외부 프로젝트 Assembly를 생성하는 방법이 궁급합니다.

  • 메인 프로젝트 : GetAssemblyImage
  • MAUI SDK 외부 프로젝트 : ImageResource
  • MAUI SDK 외부 프로젝트 : OtherProject
// 제가 아는 Assembly 생성 방식...
Assembly assembly = type(????).Assembly;
Assembly assembly = Application.Current?.GetType()?.Assembly;

[ 사진 참조 ]

OtherProject 프로젝트에서 ImageResource - Assembly를 가져와서 Resource - Svg에 접근하고 싶습니다.

// In `OtherProject` 
Assembly imageResourceAssembly = ?????

조건

  • ImageResource - AssemblyOtherProject프로젝트에서 생성 되어야합니다.
  • OtherProject 프로젝트가 프로젝트 참조가 없어야 합니다.
    이유 : GetAssemblyImageOtherProject를 참조하고 있기 때문에 순환 참조가 발생합니다.

??? 프로젝트 형식 이름이 기억이 안나네요

  • Xamarin은 다중 프로젝트 형식입니다.
  • MAUI이는 단일 프로젝트 형식이라 ;;; 사진과 같은 구조가 비이상적 이긴합니다.
1개의 좋아요

(GPT 4.0)

순환 참조를 피하고, 다른 프로젝트의 어셈블리를 불러오려면 리플렉션을 사용할 수 있습니다. 그런데 리플렉션을 사용하면 일반적인 어셈블리 참조에 비해 성능에 영향을 줄 수 있고, 코드의 복잡성이 증가할 수 있습니다.

다음은 리플렉션을 이용하여 어셈블리를 로드하는 기본적인 방법입니다.

Assembly assembly = Assembly.Load("AssemblyName");

예를 들어, ImageResource 프로젝트의 어셈블리를 로드하려면, 아래와 같이 할 수 있습니다.

Assembly imageResourceAssembly = Assembly.Load("ImageResource");

이 방법으로 어셈블리를 로드하면, ImageResource 어셈블리 내의 타입이나 리소스에 접근할 수 있습니다. 하지만, 이 방법을 사용하려면 런타임에서 해당 어셈블리를 찾을 수 있어야 합니다. 그렇지 않으면 예외가 발생할 수 있습니다.

다음은 리플렉션을 이용하여 특정 어셈블리에서 타입을 가져오는 예제입니다.

Type myType = imageResourceAssembly.GetType("ImageResource.MyType");

이렇게 어셈블리와 타입을 가져온 후에, 리소스에 접근하거나 메서드를 호출할 수 있습니다.

이 모든 접근은 권한과 보안에 대한 검토가 필요하며, 해당 어셈블리와 타입이 정확한지 확인이 필요합니다. 예외 처리도 반드시 필요합니다.

또한, 순환 참조 문제를 해결하려면 아키텍처를 재검토해야 할 수도 있습니다. 공통 기능이나 클래스를 별도의 프로젝트로 분리하여, 두 프로젝트가 이 공통 프로젝트를 참조하도록 하는 것이 한 방법일 수 있습니다.

2개의 좋아요

프로젝트 참조가 되어있으면 로드가 되네요

image

Assembly imageResourceAssembly = Assembly.Load("ImageResource");


프로젝트 참조 없을 때 Could not load assembly

"Could not load file or assembly 'ImageResource,
Culture=neutral, PublicKeyToken=null'.
지정된 파일을 찾을 수 없습니다.": "ImageResource,
 Culture=neutral, PublicKeyToken=null"

Xamarin에서 MAUI로 마이그레이션 중입니다.

Assembly에 등록된 파일을 FFImageLoading.Svg.Maui.SvgImageSource로 변환하는 코드가 있는데,
MAUI에서 동작하지 않더라구요. (외부 프로젝트의 이미지 참조 경로를 찾지 못하는 상태입니다.)
특정 프로젝트의 Assembly를 가져와서 찾게?하니까 이미지를 잘 가져오네요, 감사합니다.