<loadFromRemoteSources> element

Especifica se assemblies carregados de fontes remotas devem receber confiança total em .NET Framework 4 e versões posteriores.

Observação

Se você foi direcionado para este artigo devido a uma mensagem de erro na lista de erros do projeto do Visual Studio ou a um erro de build, confira Como usar um assembly da Web no Visual Studio.

<configuration>
  <runtime>
    <loadFromRemoteSources>

Syntax

<loadFromRemoteSources
   enabled="true|false"/>

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Descrição
enabled Atributo obrigatório.

Especifica se um assembly carregado de uma fonte remota deve receber confiança total.

atributo habilitado

Valor Descrição
false Não conceda confiança total a aplicativos de fontes remotas. Esse é o padrão.
true Conceda confiança total a aplicativos de fontes remotas.

Elementos filho

Nenhum.

Elementos pai

Elemento Descrição
configuration O elemento raiz em cada arquivo de configuração usado pelos aplicativos do Common Language Runtime e .NET Framework.
runtime Contém informações sobre opções de inicialização do runtime.

Comentários

No .NET Framework 3.5 e versões anteriores, se você carregar um assembly de um local remoto, o código no assembly será executado em confiança parcial com um conjunto de concessões que depende da zona da qual ele é carregado. Por exemplo, se você carregar um assembly de um site, ele será carregado na zona da Internet e receberá o conjunto de permissões da Internet. Em outras palavras, ele é executado em uma área restrita da Internet.

Do .NET Framework 4 em diante, a política CAS (segurança de acesso ao código) está desabilitada e os assemblies são carregados em confiança total. Normalmente, isso concederia confiança total aos assemblies carregados com o método Assembly.LoadFrom que anteriormente havia estado em área restrita. Para evitar isso, a capacidade de executar código em assemblies carregados de uma fonte remota é desabilitada por padrão. Por padrão, se você tentar carregar um assembly remoto, uma FileLoadException com a seguinte mensagem de exceção será gerada:

System.IO.FileNotFoundException: Could not load file or assembly 'file:assem.dll' or one of its dependencies. Operation is not supported.
(Exception from HRESULT: 0x80131515)
File name: 'file:assem.dll' --->
System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly
to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default,
so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch.

Para carregar o assembly e executar seu código, você deve:

  • Criar explicitamente uma área restrita para o assembly (confira Como executar código parcialmente confiável em uma área restrita).

  • Executar o código do assembly em confiança total. Você faz isso configurando o elemento <loadFromRemoteSources>. Ele permite que você especifique que os assemblies executados em confiança parcial em versões anteriores do .NET Framework agora sejam executados com confiança total no .NET Framework 4 e versões posteriores.

Importante

Se o assembly não deve ser executado em confiança total, não defina esse elemento de configuração. Em vez disso, crie uma área restrita AppDomain para carregar o assembly.

O atributo enabled para o elemento <loadFromRemoteSources> só é eficaz quando a CAS (segurança de acesso ao código) está desabilitada. Por padrão, a política CAS é desabilitada no .NET Framework 4 e versões posteriores. Se você definir enabled como true, os assemblies remotos receberão confiança total.

Se enabled não estiver definido como true, uma FileLoadException será gerada sob uma das seguintes condições:

  • O comportamento de área restrita do domínio atual é diferente do comportamento dele no .NET Framework 3.5. Isso requer que a política CAS seja desabilitada e que o domínio atual não seja colocado em uma área restrita.

  • O assembly que está sendo carregado não é da zona MyComputer.

Definir o elemento <loadFromRemoteSources> como true impede que essa exceção seja gerada. Ele permite que você especifique que você não está confiando no Common Language Runtime para proteger os assemblies carregados para segurança e que eles podem ser executados em confiança total.

Observações

  • No .NET Framework 4.5 e versões posteriores, os assemblies em compartilhamentos de rede local (ou seja, a zona de segurança da intranet local) são executados em confiança total por padrão; você não precisa habilitar o elemento <loadFromRemoteSources>. Para zonas de segurança diferentes de Computador Local ou Intranet Local, defina o valor como true.

  • Se um aplicativo tiver sido copiado da Web, ele será sinalizado pelo Windows como sendo um aplicativo Web, mesmo que resida no computador local. Você pode alterar essa designação alterando suas propriedades de arquivo ou pode usar o elemento <loadFromRemoteSources> para conceder confiança total ao assembly. Como alternativa, você pode usar o método UnsafeLoadFrom para carregar um assembly local que o sistema operacional sinalizou como tendo sido carregado da Web.

  • Você pode obter um FileLoadException em um aplicativo em execução em um aplicativo do Computador Virtual do Windows. Isso pode acontecer quando você tentar carregar um arquivo de pastas vinculadas no computador de hospedagem. Também pode ocorrer quando você tentar carregar um arquivo de uma pasta vinculada por Serviços da Área de Trabalho Remota (Serviços de Terminal). Para evitar a exceção, defina enabled como true.

Arquivo de configuração

Esse elemento normalmente é usado no arquivo de configuração do aplicativo, mas pode ser usado em outros arquivos de configuração, dependendo do contexto. Para obter mais informações, confira o artigo Mais Usos Implícitos da Política CAS: loadFromRemoteSources no blog de segurança do .NET.

Exemplo

O exemplo a seguir mostra como conceder confiança total a assemblies carregados de fontes remotas.

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

Confira também