[c#] 오류 메시지 ‘요청한 유형 중 하나 이상을로드 할 수 없습니다. 자세한 정보는 LoaderExceptions 특성을 검색하십시오. ‘

Entity Framework , SQL Server 2000, Visual Studio 2008 및 Enterprise Library를 사용하여 응용 프로그램을 개발했습니다 .

로컬에서는 완벽하게 작동하지만 프로젝트를 테스트 환경에 배포하면 다음 오류가 발생합니다.

요청 된 유형 중 하나 이상을로드 할 수 없습니다. 자세한 정보는 LoaderExceptions 특성을 검색하십시오.

스택 추적 : System.Reflection.Module._GetTypesInternal (StackCrawlMark & ​​stackMark)

System.Reflection.Assembly.GetTypes ()에서

System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly (LoadingContext 컨텍스트)에서

System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache (LoadingContext 컨텍스트)에서

System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache에서 (어셈블리 어셈블리, 부울 loadReferencedAssemblies, 사전 2 knownAssemblies, Dictionary2 및 typesInLoading, List`1 & 오류)

System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache (ObjectItemCollection objectItemCollection, 어셈블리 어셈블리, 부울 loadReferencedAssemblies)에서

System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType (Type type)에서

System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType (유형 유형, 어셈블리 호출 어셈블리)

System.Data.Objects.ObjectContext.CreateQuery [T] (String queryString, ObjectParameter [] 매개 변수)에서

Entity Framework에 문제가있는 것 같습니다. 어떻게 고칠 수 있습니까?



답변

프로젝트 참조의 로컬 복사 속성을 true로 설정하여이 문제를 해결했습니다.


답변

이 오류에는 진정한 마법의 총알 답변이 없습니다. 열쇠는 문제를 이해하기 위해 모든 정보를 얻는 것입니다. 동적으로로드 된 어셈블리에 참조 된 어셈블리가 없을 수 있습니다. 해당 어셈블리는 응용 프로그램의 bin 디렉토리에 있어야합니다.

이 코드를 사용하여 누락 된 항목을 판별하십시오.

using System.IO;
using System.Reflection;
using System.Text;

try
{
    //The code that causes the error goes here.
}
catch (ReflectionTypeLoadException ex)
{
    StringBuilder sb = new StringBuilder();
    foreach (Exception exSub in ex.LoaderExceptions)
    {
        sb.AppendLine(exSub.Message);
        FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
        if (exFileNotFound != null)
        {
            if(!string.IsNullOrEmpty(exFileNotFound.FusionLog))
            {
                sb.AppendLine("Fusion Log:");
                sb.AppendLine(exFileNotFound.FusionLog);
            }
        }
        sb.AppendLine();
    }
    string errorMessage = sb.ToString();
    //Display or log the error based on your application.
}

답변

나를 위해 일한 해결책은 bin / 및 obj / 폴더를 삭제하고 솔루션을 다시 작성하는 것이 었습니다.


답변

두 가지 가능한 솔루션 :

  1. 릴리스 모드에서 컴파일하고 있지만 디버그 디렉토리에서 이전 컴파일 된 버전을 배포합니다 (또는 그 반대).
  2. 테스트 환경에 올바른 버전의 .NET Framework가 설치되어 있지 않습니다.

답변

이전에 언급했듯이 일반적으로 어셈블리가없는 경우입니다.

정확히 어떤 어셈블리가 누락되었는지 확인하려면 디버거를 연결하고 중단 점을 설정 한 다음 예외 개체가 표시되면 ‘LoaderExceptions’속성으로 드릴 다운하십시오. 누락 된 어셈블리가 있어야합니다.

그것이 도움이되기를 바랍니다!


답변

해결책은 LoaderException을 확인하는 것이 었습니다. 필자의 경우 일부 DLL 파일이 누락되었습니다.

여기에 이미지 설명을 입력하십시오


답변

IIS에 배포 한 경우 IIS 에서 32 비트 응용 프로그램을 허용해야합니다 . 현재 응용 프로그램 풀의 설정에서이를 정의 할 수 있습니다.