파일 또는 어셈블리를로드 할 수 없습니다.

게오르기 레인지 로프

ASP.Net Core 2.2 웹 앱을 리팩터링하고 있습니다. 일부 기능을 별도의 클래스 라이브러리 (.net core 2.2) 프로젝트로 옮기기로 결정했습니다. 클래스 라이브러리에는 System.IO.Abstractions에 대한 종속성이 있으므로 단위 테스트가 가능합니다. 클래스 라이브러리의 단순화 된 버전은 다음과 같습니다.

using System;
using System.IO.Abstractions;

namespace ClassLibrary1
{
    public class TestService
    {
        private IFileSystem fileSystem;

        internal TestService(IFileSystem fileSystem)
        {
            this.fileSystem = fileSystem;
        }

        public TestService() : this(new FileSystem()) {}
    }
}

웹 애플리케이션 프로젝트에서 클래스 라이브러리 dll에 대한 참조를 추가했습니다. Startup.cs에서 using 문을 추가하고 ConfigureServices에서 DI 컨테이너에 TestService (클래스 라이브러리에 정의 됨)를 등록합니다.

 ...
using ClassLibrary1;

namespace WebApplication1
{
    public class Startup
    {
        ...

        public void ConfigureServices(IServiceCollection services)
        {
            ...
            services.AddScoped<TestService>();
        }

        ...
    }
}

다음과 같이 컨트롤러에서 서비스를 인스턴스화하려고합니다.

using ClassLibrary1;

namespace WebApplication1.Controllers
{    
    public class HomeController : Controller
    {
        TestService service;

        public HomeController(TestService service)
        {
            this.service = service;
        }

        ...
    }
}

이 프로젝트를 실행할 때 다음 오류가 발생합니다.

FileNotFoundException : 'System.IO.Abstractions, 버전 = 7.0.0.0, Culture = neutral, PublicKeyToken = 96bf224d23c43e59'파일 또는 어셈블리를로드 할 수 없습니다. 시스템이 지정된 파일을 찾을 수 없습니다.

System.IO.Abstractions 패키지를 webapp 프로젝트에 추가하지 않고 어떻게 해결합니까?

내 이해는 DI를 사용하여 해결하려는 클래스의 생성자에 외부 종속성 인 IFileSystem 유형이 포함되어있어 웹 앱이 해결할 수 없기 때문에 문제가 발생한다는 것입니다.

이 문제에 대한 해결책을 찾은 후 시도한 한 가지는 필요한 종속성을 등록하는 클래스 라이브러리에 확장 메서드를 추가하는 것입니다.

using Microsoft.Extensions.DependencyInjection;
using System.IO.Abstractions;

namespace ClassLibrary1
{
    public static class IServiceCollectionExtension
    {
        public static IServiceCollection AddTestService(this IServiceCollection services)
        {
            services.AddScoped<IFileSystem, FileSystem>();
            services.AddScoped<TestService>();

            return services;
        }
    }
}

그런 다음 다음과 같이 웹앱의 ConfigureServices에서이 확장 메서드를 사용합니다.

services.AddTestService();

그러나 이로 인해 동일한 오류 메시지가 나타납니다.

편집하다:

내가 가진 진짜 질문은 종속성에 대해 걱정하지 않고 사용할 수 있도록 클래스 라이브러리를 올바르게 작성하는 방법입니다.

따라서 webapp에서 TestService는 공용 매개 변수없는 생성자를 사용하여 인스턴스화되어야하며 xunit 프로젝트의 classlib 솔루션 내에서 TestService는 내부 생성자를 사용하여 인스턴스화 될 수 있습니다.

스텝 업

클래스 라이브러리에서 종속성을 해결해서는 안됩니다. 컴포지션 루트 는 기본 응용 프로그램에만있을 수 있습니다. 컴포지션 루트는 개체 그래프를 설정할 수있는 응용 프로그램 수명주기의 시작 및 가장 빠른 지점입니다.

Startup.csASP.NET Core 애플리케이션의 컴포지션 루트도 마찬가지 입니다.

services.AddScoped<IFileSystem, FileSystem>();

클래스 라이브러리에는 컴포지션 루트가 없습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

파일 또는 어셈블리 mongocrypt를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 Devart.Data를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리를로드 할 수 없습니다. itextsharp

분류에서Dev

파일 또는 어셈블리를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 'LogicNP.ShellObjects'를로드 할 수 없습니다.

분류에서Dev

MySQL UWP "파일 또는 어셈블리를로드 할 수 없습니다."

분류에서Dev

파일 또는 어셈블리 'WebGrease'또는 해당 종속성 중 하나를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 .NET을로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 'WebDriver, Version = 2.35.0.0 ...'을로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 SharePoint 2010을로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 'AdaptiveCards.Html'을로드 할 수 없습니다.

분류에서Dev

프로젝트 참조를 위해 파일 또는 어셈블리를로드 할 수 없습니다.

분류에서Dev

Azure 일괄 작업 오류 : 파일 또는 어셈블리를로드 할 수 없습니다. 'Microsoft.Data.OData

분류에서Dev

Azure 함수 : Newtonsoft.Json 파일 또는 어셈블리를로드 할 수 없습니다.

분류에서Dev

다른 "파일 또는 어셈블리를로드 할 수 없습니다. 'System.Threading.Tasks.Extensions, 버전 = 4.2.0.0"

분류에서Dev

WP8.1 응용 프로그램에서 파일 또는 어셈블리를로드 할 수 없습니다.

분류에서Dev

WCF 서비스를 사용하여 파일 또는 어셈블리를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 Microsoft.Extensions.Logging.Abstractions를로드 할 수 없습니다.

분류에서Dev

ASPNETCOMPILER 오류 ASPCONFIG : 파일 또는 어셈블리를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리를로드 할 수 없습니다. System.ValueTuple 버전 = 4.0.3.0

분류에서Dev

FileNotFoundException : 파일 또는 어셈블리 System.IO.Ports를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 'Microsoft.Data.SqlClient를로드 할 수 없습니다.

분류에서Dev

DLL 지옥-파일 또는 어셈블리 System.Threading.Tasks.Extensions를로드 할 수 없습니다.

분류에서Dev

.NET Standard + .NET Framework : 'Ninject'파일 또는 어셈블리를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 System.Runtime.CompilerServices.Unsafe를로드 할 수 없습니다.

분류에서Dev

C # CLR Excecption "BadImageFormatException : 파일 또는 어셈블리를로드 할 수 없습니다."

분류에서Dev

파일 또는 어셈블리 'Microsoft.Extensions.Logging.Abstractions를로드 할 수 없습니다.

분류에서Dev

파일 또는 어셈블리 'Microsoft.Xrm.Client를로드 할 수 없습니다.

Related 관련 기사

  1. 1

    파일 또는 어셈블리 mongocrypt를로드 할 수 없습니다.

  2. 2

    파일 또는 어셈블리를로드 할 수 없습니다.

  3. 3

    파일 또는 어셈블리 Devart.Data를로드 할 수 없습니다.

  4. 4

    파일 또는 어셈블리를로드 할 수 없습니다. itextsharp

  5. 5

    파일 또는 어셈블리를로드 할 수 없습니다.

  6. 6

    파일 또는 어셈블리 'LogicNP.ShellObjects'를로드 할 수 없습니다.

  7. 7

    MySQL UWP "파일 또는 어셈블리를로드 할 수 없습니다."

  8. 8

    파일 또는 어셈블리 'WebGrease'또는 해당 종속성 중 하나를로드 할 수 없습니다.

  9. 9

    파일 또는 어셈블리 .NET을로드 할 수 없습니다.

  10. 10

    파일 또는 어셈블리 'WebDriver, Version = 2.35.0.0 ...'을로드 할 수 없습니다.

  11. 11

    파일 또는 어셈블리 SharePoint 2010을로드 할 수 없습니다.

  12. 12

    파일 또는 어셈블리 'AdaptiveCards.Html'을로드 할 수 없습니다.

  13. 13

    프로젝트 참조를 위해 파일 또는 어셈블리를로드 할 수 없습니다.

  14. 14

    Azure 일괄 작업 오류 : 파일 또는 어셈블리를로드 할 수 없습니다. 'Microsoft.Data.OData

  15. 15

    Azure 함수 : Newtonsoft.Json 파일 또는 어셈블리를로드 할 수 없습니다.

  16. 16

    다른 "파일 또는 어셈블리를로드 할 수 없습니다. 'System.Threading.Tasks.Extensions, 버전 = 4.2.0.0"

  17. 17

    WP8.1 응용 프로그램에서 파일 또는 어셈블리를로드 할 수 없습니다.

  18. 18

    WCF 서비스를 사용하여 파일 또는 어셈블리를로드 할 수 없습니다.

  19. 19

    파일 또는 어셈블리 Microsoft.Extensions.Logging.Abstractions를로드 할 수 없습니다.

  20. 20

    ASPNETCOMPILER 오류 ASPCONFIG : 파일 또는 어셈블리를로드 할 수 없습니다.

  21. 21

    파일 또는 어셈블리를로드 할 수 없습니다. System.ValueTuple 버전 = 4.0.3.0

  22. 22

    FileNotFoundException : 파일 또는 어셈블리 System.IO.Ports를로드 할 수 없습니다.

  23. 23

    파일 또는 어셈블리 'Microsoft.Data.SqlClient를로드 할 수 없습니다.

  24. 24

    DLL 지옥-파일 또는 어셈블리 System.Threading.Tasks.Extensions를로드 할 수 없습니다.

  25. 25

    .NET Standard + .NET Framework : 'Ninject'파일 또는 어셈블리를로드 할 수 없습니다.

  26. 26

    파일 또는 어셈블리 System.Runtime.CompilerServices.Unsafe를로드 할 수 없습니다.

  27. 27

    C # CLR Excecption "BadImageFormatException : 파일 또는 어셈블리를로드 할 수 없습니다."

  28. 28

    파일 또는 어셈블리 'Microsoft.Extensions.Logging.Abstractions를로드 할 수 없습니다.

  29. 29

    파일 또는 어셈블리 'Microsoft.Xrm.Client를로드 할 수 없습니다.

뜨겁다태그

보관