어셈블리 누락 (.NET Core)으로 인해 MetadataLoadContext를 통한 형식 검사 실패

마르코

.NET Core 3의 MetadataLoadContext를 통해 사용할 수있는 현재 범위에서 어셈블리를로드하지 않고 특정 유형이있는 어셈블리를 검사하고 싶습니다.

그러나 다음 예제를 시도하면

internal static class Program
{
    // ReSharper disable once UnusedParameter.Local
    private static void Main(string[] args)
    {
        var paths = new string[] { @"Plugin.dll" };
        var resolver = new PathAssemblyResolver(paths);
        var pluginInterface = typeof(IPlugin);
        using (var context = new MetadataLoadContext(resolver))
        {
            var assembly =
                context.LoadFromAssemblyName(@"Plugin");
            foreach (var type in assembly.GetTypes())
            {
                if (type.IsClass && pluginInterface.IsAssignableFrom(type))
                    Console.WriteLine("found");
            }
        }
    }
}

나는 예외를 얻는다

System.IO.FileNotFoundException : 핵심 어셈블리를 찾을 수 없습니다. MetadataLoadContext 생성자에서 유효한 핵심 어셈블리 이름을 지정하거나 핵심 어셈블리를로드 할 수있는 MetadataAssemblyResolver를 제공합니다.

...에서 var context = new MetadataLoadContext(resolver)

코어 어셈블리는 무엇을 의미합니까? 아니면 내가 뭘 잘못하고 있니? https://blog.vincentbitter.nl/net-core-3-0/ 나를 위해 작동하지 않는 것 같습니다.

MSDN.WhiteKnight

기존 답변이 저에게 효과적이지 않았습니다 (.NET Core 2.1). System.Runtime을 찾을 수 없다는 오류와 함께 실패합니다. System.Runtime에 대한 전체 경로를 하드 코딩하면 System.Private.CoreLib와 같은 다른 어셈블리에 대해 실패합니다. 또한 IsAssignableFrom을 통한 유형 검사는 한 유형이 MetadataLoadContext에서 제공되지 않을 때 작동하지 않는 것 같습니다.

어셈블리로드 오류에 대한 가능한 솔루션은 모든 BCL 어셈블리 ( RuntimeEnvironment.GetRuntimeDirectory 에서 반환 된 디렉터리의 모든 .dll 파일 )를 포함하는 것입니다. 모두가 실제로 관리되는 어셈블리는 아니지만 작동하는 것처럼 보이므로 다소 어리석은 느낌이 듭니다. 다음은 MetadataLoadContext를 통해 인터페이스를 구현하는 검색 유형의 전체 예입니다.

using System;
using System.IO;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;

namespace MetadataLoadContextSample
{
    class Program
    {
        static int Main(string[] args)
        {
            string inputFile = @"Plugin.dll";

            string[] runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll");                        
            var paths = new List<string>(runtimeAssemblies);
            paths.Add(inputFile);            
            var resolver = new PathAssemblyResolver(paths);
            var context = new MetadataLoadContext(resolver);

            using (context)
            {                
                Assembly assembly = context.LoadFromAssemblyPath(inputFile);
                AssemblyName name = assembly.GetName();

                foreach (TypeInfo t in assembly.GetTypes())
                {
                    try
                    {
                        if (t.IsClass && t.GetInterface("IPlugin") != null)
                        {
                            Console.WriteLine(t.Name);
                        }
                    }
                    catch (FileNotFoundException ex)
                    {                        
                        Console.WriteLine("FileNotFoundException: " + ex.Message);
                    }
                    catch (TypeLoadException ex)
                    {
                        Console.WriteLine("TypeLoadException: " + ex.Message);
                    }
                }
            }

            Console.ReadLine();
            return 0;
        }
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

네이티브 .NET NuGet 패키지로 인해 .NET 컴파일러에서 "어셈블리가 누락되었을 수 있습니다"경고 발생

분류에서Dev

로그인 누락으로 인해 Intel XDK Android 앱에 대한 Facebook 검토 승인 실패

분류에서Dev

.NET Core 3.1에서 관리되는 C ++ / CLI 어셈블리를 실행할 때 잘못된 이미지 형식

분류에서Dev

SQL Server-Polybase를 통해 Parquet 파일을 쿼리하기위한 외부 파일 형식 생성-TCP 오류로 인해 실패

분류에서Dev

ASP.net Core 호스팅 모델을 사용한 Blazor 어셈블리 이해

분류에서Dev

.NET 이식 가능한 실행 파일 VS .NET 어셈블리

분류에서Dev

모듈 맵 누락으로 인한 Jenkins XCode iOS 빌드 실패

분류에서Dev

.NET Core에서 어셈블리 및 형식로드

분류에서Dev

프로젝트를 2.2에서 3.1로 업데이트 할 때 PostAsJsonAsync ()가 .Net Core 3.1에서 작동하지 않음 (어셈블리 누락) 또는 .NET Core에서 API POST 요청을 사용하는 방법

분류에서Dev

AWS 애플리케이션로드 밸런서 뒤에 x-pack 지원 Elasticsearch를 추가하면 인증 누락으로 인해 상태 확인 실패

분류에서Dev

루트로 원격 로그인이 발생하면 권한 누락으로 인해 rsync가 어떻게 실패 할 수 있습니까?

분류에서Dev

종속성으로 인해 cocoapods를 통한 XMPPFramework 설치 실패

분류에서Dev

.net의 다른 어셈블리에서 개인 정적 형식 (또는 클래스)에 대한 메서드를 호출하는 방법은 무엇입니까?

분류에서Dev

FxCop 누락으로 인해 SonarRunner가 실패합니다.

분류에서Dev

dx.jar 누락으로 인해 빌드 실패

분류에서Dev

Grunt Qunit-Tests-어설 션이 실패한 경우에만 : QUnit start () 호출 누락으로 인해 PhantomJS 시간 초과

분류에서Dev

SQL Server에서 어셈블리 실행 실패, 강력한 이름 유효성 검사 실패 예외

분류에서Dev

= string에 대한 인용 누락으로 인해 html의 유효성을 검사 할 수 없습니다.

분류에서Dev

인라인 어셈블리를 사용한 원자 적 증가

분류에서Dev

.NET Core 대 .NET Framework-파일 또는 어셈블리를로드 할 수 없습니다. 'System.ServiceModel, 참조 어셈블리는 실행을 위해로드하면 안됩니다.

분류에서Dev

일치하지 않는 SID로 인해 어셈블리 배포 실패

분류에서Dev

TFS 2015-테스트 어셈블리의 예외로 인해 빌드 실패

분류에서Dev

양식 유효성 검사가 실패하면 쿼리 문자열 매개 변수가 누락 됨

분류에서Dev

ReflectionTypeLoadException으로 인해 어셈블리에서 TypeInfo (s)를 검색 할 수 없습니다.

분류에서Dev

손으로 코딩 한 어셈블리-실용적인 레지스터 할당?

분류에서Dev

NuGet의 참조를 사용하는 .NET Visual Studio로 인해 파일 또는 어셈블리를로드 할 수 없음

분류에서Dev

C # 확장 메서드 오버로드로 인해 "어셈블리 참조 누락"오류 발생

분류에서Dev

Box-API : .NET Portable Subset 용으로 작성된 타사 어셈블리에 강력한 이름을 추가하려면 어떻게해야합니까?

분류에서Dev

.NET에서 인터페이스를 구현하기 위해 어셈블리에서 기존 형식을 만드는 방법

Related 관련 기사

  1. 1

    네이티브 .NET NuGet 패키지로 인해 .NET 컴파일러에서 "어셈블리가 누락되었을 수 있습니다"경고 발생

  2. 2

    로그인 누락으로 인해 Intel XDK Android 앱에 대한 Facebook 검토 승인 실패

  3. 3

    .NET Core 3.1에서 관리되는 C ++ / CLI 어셈블리를 실행할 때 잘못된 이미지 형식

  4. 4

    SQL Server-Polybase를 통해 Parquet 파일을 쿼리하기위한 외부 파일 형식 생성-TCP 오류로 인해 실패

  5. 5

    ASP.net Core 호스팅 모델을 사용한 Blazor 어셈블리 이해

  6. 6

    .NET 이식 가능한 실행 파일 VS .NET 어셈블리

  7. 7

    모듈 맵 누락으로 인한 Jenkins XCode iOS 빌드 실패

  8. 8

    .NET Core에서 어셈블리 및 형식로드

  9. 9

    프로젝트를 2.2에서 3.1로 업데이트 할 때 PostAsJsonAsync ()가 .Net Core 3.1에서 작동하지 않음 (어셈블리 누락) 또는 .NET Core에서 API POST 요청을 사용하는 방법

  10. 10

    AWS 애플리케이션로드 밸런서 뒤에 x-pack 지원 Elasticsearch를 추가하면 인증 누락으로 인해 상태 확인 실패

  11. 11

    루트로 원격 로그인이 발생하면 권한 누락으로 인해 rsync가 어떻게 실패 할 수 있습니까?

  12. 12

    종속성으로 인해 cocoapods를 통한 XMPPFramework 설치 실패

  13. 13

    .net의 다른 어셈블리에서 개인 정적 형식 (또는 클래스)에 대한 메서드를 호출하는 방법은 무엇입니까?

  14. 14

    FxCop 누락으로 인해 SonarRunner가 실패합니다.

  15. 15

    dx.jar 누락으로 인해 빌드 실패

  16. 16

    Grunt Qunit-Tests-어설 션이 실패한 경우에만 : QUnit start () 호출 누락으로 인해 PhantomJS 시간 초과

  17. 17

    SQL Server에서 어셈블리 실행 실패, 강력한 이름 유효성 검사 실패 예외

  18. 18

    = string에 대한 인용 누락으로 인해 html의 유효성을 검사 할 수 없습니다.

  19. 19

    인라인 어셈블리를 사용한 원자 적 증가

  20. 20

    .NET Core 대 .NET Framework-파일 또는 어셈블리를로드 할 수 없습니다. 'System.ServiceModel, 참조 어셈블리는 실행을 위해로드하면 안됩니다.

  21. 21

    일치하지 않는 SID로 인해 어셈블리 배포 실패

  22. 22

    TFS 2015-테스트 어셈블리의 예외로 인해 빌드 실패

  23. 23

    양식 유효성 검사가 실패하면 쿼리 문자열 매개 변수가 누락 됨

  24. 24

    ReflectionTypeLoadException으로 인해 어셈블리에서 TypeInfo (s)를 검색 할 수 없습니다.

  25. 25

    손으로 코딩 한 어셈블리-실용적인 레지스터 할당?

  26. 26

    NuGet의 참조를 사용하는 .NET Visual Studio로 인해 파일 또는 어셈블리를로드 할 수 없음

  27. 27

    C # 확장 메서드 오버로드로 인해 "어셈블리 참조 누락"오류 발생

  28. 28

    Box-API : .NET Portable Subset 용으로 작성된 타사 어셈블리에 강력한 이름을 추가하려면 어떻게해야합니까?

  29. 29

    .NET에서 인터페이스를 구현하기 위해 어셈블리에서 기존 형식을 만드는 방법

뜨겁다태그

보관