Partilhar via


Redirecionando as versões do Assembly

Quando você constrói um.Aplicativo do NET Framework contra uma versão específica de um assembly de nome forte, o aplicativo usa essa versão do assembly em tempo de execução. No entanto, às vezes, convém o aplicativo seja executado em uma versão mais recente de um assembly. Um arquivo de configuração do aplicativo, o arquivo de configuração de máquina ou um arquivo de diretiva de editor pode redirecionar uma versão de um assembly para outro. Para obter detalhes sobre como o common language runtime usa esses arquivos para determinar qual versão do assembly usar, consulte Como o Runtime localiza Assemblies. Você pode usar o .NET Framework (Mscorcfg) para redirecionar assembly versões em tanto no nível de aplicativo e o nível de máquina ou você podem editar diretamente o arquivo de configuração.

Observação

Você não pode redirecionar versões para assemblies que não são fortes.O common language runtime ignora a versão para assemblies que não são fortes.

Redirecionando as versões do Assembly usando a diretiva de editor

Os fornecedores de módulos (assemblies) podem indicar que os aplicativos devem usar uma versão mais recente de um assembly, incluindo um arquivo de política do publisher com o assembly atualizado. O arquivo de diretiva de editor, que está localizado no cache global de assemblies, contém as configurações de redirecionamento do assembly.

Cada principais.secundária versão de um assembly tem seu próprio arquivo de diretiva de editor. Por exemplo, os redirecionamentos de versão 1.1.2.222 para 1.1.3.000 e de versão 1.1.2.321 versão 1.1.3.000 tanto ir no mesmo arquivo. No entanto, um redirecionamento a partir da versão 2.0.0.999 para a versão 3.0.0.000 entra em um arquivo diferente.

Se existir um arquivo de diretiva de editor, o runtime verifica esse arquivo depois de verificar o manifesto do assembly e o arquivo de configuração do aplicativo. Fornecedores só devem usar diretivas do publisher quando o novo conjunto é compatível com o assembly que está sendo redirecionado.

Você pode ignorar a diretiva de editor especificando as configurações no arquivo de configuração do aplicativo.

Ignorando a diretiva de editor

Novas versões de assemblys que alegam ser compatível com versões anteriores ainda podem quebrar um aplicativo. Quando isso acontece, você pode usar a seguinte configuração no arquivo de configuração do aplicativo para tornar o tempo de execução para ignorar a diretiva de editor:

<publisherPolicy apply="no" />

Ignorar a diretiva de editor para manter o aplicativo em execução para os usuários, mas certifique-se de que relatar o problema para o fornecedor do assembly. Depois que um assembly tiver uma diretiva de editor, o fornecedor deve se certificar que o assembly é compatível com versões anteriores e que os clientes podem usar a nova versão tanto quanto possível.

Redirecionando as versões de montagem no nível do aplicativo

Suponha que o fornecedor do assembly lança uma versão mais recente de um assembly que seu aplicativo usa, mas não fornecer uma diretiva de editor porque o fornecedor não que garantir que o novo conjunto é compatível com a versão original. Você pode especificar que o seu aplicativo usar a versão mais recente do assembly, colocando as informações de ligação de assembly no arquivo de configuração do aplicativo.

Redirecionando as versões de montagem no nível da máquina

Pode haver casos raros quando quiser que um administrador da máquina a todos os aplicativos em uma máquina para usar uma versão específica de um assembly. Por exemplo, convém cada aplicativo para usar uma versão do assembly específico, porque ele corrige uma brecha de segurança. Se um assembly for redirecionado no arquivo de configuração da máquina, todos os aplicativos usando a versão antiga usará a nova versão. O arquivo de configuração de máquina substitui o arquivo de configuração do aplicativo e a diretiva de editor.

Especificando os arquivos de configuração de ligação de Assembly

O arquivo de configuração do aplicativo, arquivo de configuração da máquina e o arquivo de política do publisher usam o mesmo esquema XML para processar o redirecionamento do assembly.

Ligação de assembly

Especificar informações para um assembly, colocando as informações para cada assembly dentro de um <dependentAssembly> elemento. O <assemblyIdentity> elemento contém informações que identificam um assembly. Você pode ter mais de um <dependentAssembly> o elemento no arquivo de configuração, mas deve haver exatamente um <assemblyIdentity> elemento em cada <dependentAssembly> elemento.

Para vincular a um assembly, você deve especificar a seqüência de caracteres "urn: schemas-microsoft-com:asm.v1" com o xmlns atributo na <assemblyBinding> marca.

Especificando a diretiva de editor

Para tornar o tempo de execução para ignorar a diretiva de editor para um determinado assembly, colocar o <publisherPolicy> elemento a <dependentAssembly> elemento. Para tornar o tempo de execução para ignorar a diretiva de editor para todos os assemblies que o aplicativo usa, coloque essa configuração na <assemblyBinding> elemento. Você também pode usar o .NET Framework (Mscorcfg) para ignorar a diretiva de editor.

A configuração padrão para o Aplicar atributo é Sim. Definindo a Aplicar para o atributo sem substitui qualquer anterior Sim configurações. Por exemplo, se Aplicar for definido como sem no nível do aplicativo, qualquer assembly específico Aplicar será ignorada, mesmo se ele declara que o valor a ser Sim. Assim, o sem configuração é o estado somente útil, pois isso altera o padrão.

Redirecionando as versões do Assembly

Para redirecionar uma versão para outra, use o <bindingRedirect> elemento. O oldVersion atributo pode especificar uma versão única ou um intervalo de versões. Por exemplo, <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/> Especifica que o runtime deve usar a versão 2.0.0.0 em vez de versões de montagem entre 1.1.0.0 e 1.2.0.0.

Exemplo

O exemplo a seguir mostra como redirecionar uma versão do myAssembly para outro e desative a diretiva de editor para mySecondAssembly.

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="myAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          culture="en-us" />
        <!-- Assembly versions can be redirected in application, 
          publisher policy, or machine configuration files. -->
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
      <assemblyIdentity name="mySecondAssembly"
        publicKeyToken="32ab4ba45e0a69a1"
        culture="en-us" />
        <!-- Publisher policy can be set only in the application 
          configuration file. -->
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Redirecionando.NET Framework ligação de Assembly

Você pode usar o appliesTo de atributo na <assemblyBinding> elemento em um arquivo de configuração do aplicativo para redirecionar referências de ligação de assembly para uma versão específica do.NET Framework. Este atributo opcional utiliza um.Número de versão do NET Framework para indicar qual versão ele se aplica ao. Se nenhum appliesTo atributo for especificado, o <assemblyBinding> elemento aplica-se a todas as versões do.NET Framework.

O appliesTo atributo foi introduzido no.NET Framework versão 1.1. ele é ignorado pelo.NET Framework versão 1.0. Isso significa que todos os <assemblyBinding> elementos são aplicados ao usar o.NET Framework versão 1.0, mesmo se um appliesTo atributo for especificado.

Por exemplo, para redirecionar assembly ligação para o.NET Framework versão 1.0 conjunto Regcode você incluiria o seguinte código XML no seu arquivo de configuração do aplicativo.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" 
    appliesTo="v1.0.3705">
    <dependentAssembly> 
      <!-- assembly information goes here -->
    </dependentAssembly>
  </assemblyBinding>
</runtime>

O <assemblyBinding> elementos são sensíveis à ordem. Você deve inserir informações de redirecionamento de ligação de assembly para qualquer um.NET assemblies do Framework versão 1.0 primeiro, seguido de informações de redirecionamento de ligação de assembly para qualquer um.Assemblies do NET Framework versão 1.1. Finalmente, insira as informações de redirecionamento de ligação de assembly para qualquer um.Redirecionamento de assembly do NET Framework que não use o appliesTo de atributo e, portanto, se aplica a todas as versões do.NET Framework. No caso de um conflito no redirecionamento, a primeira instrução de redirecionamento correspondentes no arquivo de configuração é usada.

Por exemplo, para redirecionar uma referência a um.Assembly do NET Framework versão 1.0 e outra referência para um.Assembly do NET Framework versão 1.1, você usaria o padrão mostrado no pseudocódigo a seguir.

<assemblyBinding xmlns="..." appliesTo="v1.0.3705"> 
  <!—.NET Framework version 1.0 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..." appliesTo="v1.1.5000"> 
  <!—.NET Framework version 1.1 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..."> 
  <!-- redirects meant for all versions of the runtime --> 
</assemblyBinding>

Consulte também

Tarefas

Como: Criar uma diretiva de editor

Referência

Esquema configurações Runtime

Conceitos

Assemblies no Common Language Runtime

Como o Runtime Localiza Assemblies

Outros recursos

Programação com assemblies

Configuration Files

Configurando aplicativos

Esquema do arquivo de configuração para o.NET Framework