콘텐츠로 건너뛰기

FileLoadException 예외

.Net

리모트 저장소에 있는 파일로 부터 Assembly 클래스의 인스턴스를 초기화할 때, 아래와 같은 예외가 발생합니다.

var uri = "http://test.com/a.dll";
var assembly = Assembly.LoadFrom(uri); // 여기서 예외발생

예외의 내용은 아래와 같습니다.

An unhandled exception of type 'System.IO.FileLoadException' occurred in mscorlib.dll

Additional information: Could not load file or assembly 'http://test.com/a.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)

아래와 같이 runtime 요소안에 loadFromRemoteSources 요소를 추가하고, enabled 속성의 값을 true로 설정하면 문제없이 실행됩니다.

<configuration>
    <!-- 중략 -->
    <runtime>
        <loadFromRemoteSources enabled="true" />
    </runtime>
    <!-- 중략 -->
</configuration>

loadFromRemoteSource 요소 Element

원격 어셈블리의 완전 신뢰를 부여할지 여부를 지정합니다.

설명

.NET Framework 3.5 및 이전 버전에서는 원격 위치의 어셈블리를 로드하면 어셈블리가 로드되는 영역에 의해 결정되는 권한 부여 설정에 따라 부분 신뢰로 실행됩니다.
예를 들어, 웹 사이트에서 어셈블리를 로드한 경우, 인터넷 영역 으로 로드되고 Internet 권한 집합을 부여 받습니다. 즉, 어셈블리가 인터넷 샌드박스에서 실행됩니다.
.NET Framework 4와 그 이상 버전에 해당 어셈블리를 실행할 경우 예외가 발생합니다.
어셈블리에 대한 샌드박스를 명시적으로 만들거나 어셈블리를 완전 신뢰로 실행해야 합니다.

<loadFromRemoteSources> 요소를 사용하면 이전 버전의 .NET Framework에서 부분 신뢰로 실행되는 어셈블리가 .NET Framework 4 및 그 이상 버전에서 완전 신뢰로 실행되도록 지정할 수 있습니다.
기본적으로, 원격 어셈블리는 .NET Framework 4 및 그 이상에서 실행 하지 않습니다.
원격 어셈블리를 실행 하려면, 완전히 신뢰된 실행 하거나 실행할 샌드박스된 AppDomain를 만들어야 합니다.

.NET Framework 4.5에서, 로컬 네트워크 공유에 있는 어셈블리는 기본적으로 완전 신뢰 상태로 실행 합니다.
<loadFromRemoteSources> 요소를 활성시킬 필요가 없습니다.

응용 프로그램을 웹에서 복사한 경우, 해당 프로그램이 로컬 컴퓨터에 있더라도 웹 응용 프로그램이라는 플래그가 Windows에 의해 지정됩니다.
파일 속성을 변경하여 해당 지정을 변경하거나 <loadFromRemoteSources> 요소를 사용하여 어셈블리에 완전 신뢰를 부여할 수 있습니다.
대안으로서, 운영 체제가 웹에서 로드 되었음을 표시 하는 로컬 어셈블리를 로드 하는 UnsafeLoadFrom 메서드를 사용할 수 있습니다.

이 요소의 enabled 특성은 코드 액세스 보안 CAS Code Access Security을 사용하지 않도록 설정한 경우에만 적용됩니다.

기본적으로 CAS 정책은 .NET Framework 4 및 이후 버전에서 사용되지 않습니다.

enabled를 true로 설정하면 원격 응용 프로그램에 완전 신뢰가 부여됩니다.

<loadFromRemoteSources> 요소의 enabled 특성이 true로 설정되어 있지 않으면 다음과 같은 경우 예외가 발생합니다.

  • 현재 도메인의 샌드박싱 동작이 .NET Framework 3.5에서의 동작과 다른 경우. 이 경우 CAS 정책을 사용하지 않도록 설정하고 현재 도메인에 샌드박스를 적용하지 않아야 합니다.
  • MyComputer가 아닌 영역에서 어셈블리가 로드되고 있는 경우

호스팅 컴퓨터의 연결된 폴더에서 파일을 로드하려고 할 때 Windows 가상 PC 응용 프로그램에서 FileLoadException 예외가 발생할 수 있습니다.
이 오류는 원격 데스크톱 서비스 (터미널 서비스)에 링크 된 폴더에서 파일을 로드하려고 할 때에 발생합니다.
예외를 방지하려면 enabled를 true로 설정합니다.

<loadFromRemoteSources> 요소의 enabled 특성을 true로 설정하면 이 예외가 발생하지 않습니다.

따라서 공용 언어 런타임을 사용하지 않고도 보안을 위해 로드된 어셈블리를 샌드박싱하고 이러한 어셈블리가 완전 신뢰로 실행되도록 지정할 수 있습니다.

어셈블리를 완전 신뢰로 실행해서는 안 되는 경우 이 구성 요소를 설정하는 대신 어셈블리를 로드할 샌드박스가 적용된 AppDomain을 만들어야 합니다.

특성 Attribute

특성 성명
enabled 필수 특성입니다. 원격 소스에서 로드한 어셈블리에 완전 신뢰를 부여할지 여부를 지정합니다.

enabled 특성

설명
false 원격 소스의 응용 프로그램에 완전 신뢰를 부여하지 않습니다. 기본값입니다.
true 원격 소스의 응용 프로그램에 완전 신뢰를 부여합니다.

부모 요소 Element

요소 설명
runtime 런타임 초기화 옵션에 대한 정보를 포함합니다.
configuration 공용 언어 런타임 및 .NET Framework 응용 프로그램에서 사용하는 모든 구성 요소의 루트 요소입니다.

예제

다음 예제는 원격 소스의 응용 프로그램에 완전 신뢰를 부여합니다.

<configuration>
   <runtime>
      <loadFromRemoteSources enabled="true"/>
   </runtime>
</configuration>

관련 페이지

이 사이트는 광고를 포함하고 있습니다.
광고로 발생한 수익금은 서버 유지 관리에 사용되고 있습니다.

This site contains advertisements.
Revenue generated by the ad servers are being used for maintenance.

댓글 남기기