Przekierowywanie wersji zestawuRedirecting Assembly Versions

Można przekierować powiązanie kompilacji odwołania do zestawów platformy .NET Framework, zestawy innych firm lub zestawy własnych aplikacji.You can redirect compile-time binding references to .NET Framework assemblies, third-party assemblies, or your own app's assemblies. Można przekierować aplikację, aby użyć innej wersji zestawu na kilka sposobów: za pomocą zasad wydawcy, za pomocą pliku konfiguracji aplikacji; lub za pomocą pliku konfiguracji komputera.You can redirect your app to use a different version of an assembly in a number of ways: through publisher policy, through an app configuration file; or through the machine configuration file. W tym artykule omówiono sposób działania powiązań zestawów w programie .NET Framework i jak można je skonfigurować.This article discusses how assembly binding works in the .NET Framework and how it can be configured.

Ujednolicenie zestawu i powiązanie domyślnejAssembly unification and default binding

W procesie nazywanym czasem przekierowywania powiązań dla zestawów platformy .NET Framework ujednolicenie zestawu.Bindings to .NET Framework assemblies are sometimes redirected through a process called assembly unification. .NET Framework składa się z wersję środowiska CLR i o dwadzieścia zestawy .NET Framework, które tworzą biblioteki typów.The .NET Framework consists of a version of the common language runtime and about two dozen .NET Framework assemblies that make up the type library. Te zestawy .NET Framework są traktowane przez środowisko uruchomieniowe jako pojedyncza jednostka.These .NET Framework assemblies are treated by the runtime as a single unit. Domyślnie gdy aplikacja jest uruchamiana, wszystkie odwołania do typów w kodzie uruchomienia przez środowisko uruchomieniowe są przekierowywane do zestawy .NET Framework, które mają ten sam numer wersji, co środowiska uruchomieniowego, który jest ładowany w procesie.By default, when an app is launched, all references to types in code run by the runtime are directed to .NET Framework assemblies that have the same version number as the runtime that is loaded in a process. Przekierowań, które występują w przypadku tego modelu są domyślne zachowanie środowiska uruchomieniowego.The redirections that occur with this model are the default behavior for the runtime.

Na przykład jeśli aplikacja odwołuje się do typów w przestrzeni nazw zestawów System.XML i został skompilowany przy użyciu .NET Framework 4.5.NET Framework 4.5, zawiera statyczny odwołania do zestawu zestawów System.XML, który jest dostarczany z środowiska wykonawczego w wersji 4.5.For example, if your app references types in the System.XML namespace and was built by using the .NET Framework 4.5.NET Framework 4.5, it contains static references to the System.XML assembly that ships with runtime version 4.5. Jeśli chcesz przekierowywać odwołanie powiązanie, aby do zestawów System.XML, dostarczanych z programem .NET Framework 4, możesz umieścić informacji przekierowania w pliku konfiguracyjnym aplikacji.If you want to redirect the binding reference to point to the System.XML assembly that ship with the .NET Framework 4, you can put redirect information in the app configuration file. Przekierowanie powiązania w pliku konfiguracji dla ujednoliconego zestawu .NET Framework anuluje ujednolicenie dla tego zestawu.A binding redirection in a configuration file for a unified .NET Framework assembly cancels the unification for that assembly.

Ponadto można ręcznie przekierowania powiązań dla zestawów innych firm, jeśli istnieje wiele wersji zestawów.In addition, you may want to manually redirect assembly binding for third-party assemblies if there are multiple versions available.

Przekierowywanie wersji zestawu przy użyciu zasad wydawcyRedirecting assembly versions by using publisher policy

Dostawców zestawy może bezpośrednia aplikacji do nowszej wersji zestawu przez dołączenie pliku zasad wydawcy z nowego zestawu.Vendors of assemblies can direct apps to a newer version of an assembly by including a publisher policy file with the new assembly. Plik zasad wydawcy, który znajduje się w globalnej pamięci podręcznej zestawów, zawiera ustawienia przekierowywania zestawu.The publisher policy file, which is located in the global assembly cache, contains assembly redirection settings.

Każdy głównych. drobne wersja zestawu ma własny plik zasad wydawcy.Each major.minor version of an assembly has its own publisher policy file. Na przykład przekierowań wersji 2.0.2.222 do 2.0.3.000 i z wersji 2.0.2.321 na wersję 2.0.3.000 zarówno przejść do tego samego pliku, ponieważ są one powiązane z wersji 2.0.For example, redirections from version 2.0.2.222 to 2.0.3.000 and from version 2.0.2.321 to version 2.0.3.000 both go into the same file, because they are associated with version 2.0. Jednak przekierowanie z wersji 3.0.0.999 do wersji 4.0.0.000 przechodzi do pliku dla wersji 3.0.999.However, a redirection from version 3.0.0.999 to version 4.0.0.000 goes into the file for version 3.0.999. Każda wersja główna systemu .NET Framework ma własny plik zasad wydawcy.Each major version of the .NET Framework has its own publisher policy file.

Jeśli plik zasad wydawcy zestawu, środowisko uruchomieniowe sprawdza ten plik po sprawdzeniu zestawu pliku konfiguracji manifestu i aplikacji.If a publisher policy file exists for an assembly, the runtime checks this file after checking the assembly's manifest and app configuration file. Dostawców należy używać pliki zasad wydawcy, tylko wtedy, gdy nowy zestaw jest zgodny z zestawu, nastąpi przekierowanie.Vendors should use publisher policy files only when the new assembly is backward compatible with the assembly being redirected.

Można pominąć zasad wydawcy dla aplikacji, określając ustawienia w pliku konfiguracji aplikacji, zgodnie z opisem w pomijanie sekcji zasad wydawcy.You can bypass publisher policy for your app by specifying settings in the app configuration file, as discussed in the Bypassing publisher policy section.

Przekierowywanie wersji zestawu na poziomie aplikacjiRedirecting assembly versions at the app level

Istnieje kilka różnych technik zmieniające zachowanie wiązania dla aplikacji za pomocą pliku konfiguracji aplikacji: można ręcznie edytować plik, może polegać na automatycznego przekierowania powiązań lub można określić zachowanie wiązania, pomijając zasad wydawcy.There are a few different techniques for changing the binding behavior for your app through the app configuration file: you can manually edit the file, you can rely on automatic binding redirection, or you can specify binding behavior by bypassing publisher policy.

Ręczna Edycja pliku konfiguracji aplikacjiManually editing the app config file

Można ręcznie edytować pliku konfiguracji aplikacji, aby rozwiązać problemy z zestawu.You can manually edit the app configuration file to resolve assembly issues. Na przykład jeśli dostawca może zwolnić nowszej wersji zestawu, który aplikacja używa bez podawania zasad wydawcy, ponieważ nie gwarantują zgodność z poprzednimi wersjami, można kierować aplikacji umieszczanie zestawu za pomocą nowszej wersji zestawu powiązania następujące informacje w pliku konfiguracyjnym aplikacji.For example, if a vendor might release a newer version of an assembly that your app uses without supplying a publisher policy, because they do not guarantee backward compatibility, you can direct your app to use the newer version of the assembly by putting assembly binding information in your app's configuration file as follows.

<dependentAssembly>  
  <assemblyIdentity name="someAssembly"  
    publicKeyToken="32ab4ba45e0a69a1"  
    culture="en-us" />  
  <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />  
</dependentAssembly>  

Zależne automatycznego przekierowania powiązańRelying on automatic binding redirection

Począwszy od Visual Studio 2013Visual Studio 2013, nowych aplikacji klasycznych, które odnoszą się do .NET Framework 4.5.1.NET Framework 4.5.1 Użyj automatycznego przekierowania powiązań.Starting with Visual Studio 2013Visual Studio 2013, new desktop apps that target the .NET Framework 4.5.1.NET Framework 4.5.1 use automatic binding redirection. Oznacza to, że dwa składniki odwołać różne wersje tego samego zestawu o silnej nazwie, środowisko uruchomieniowe automatycznie dodaje przekierowania powiązania do nowszej wersji zestawu w pliku konfiguracyjnym (app.config) dane wyjściowe aplikacji.This means that if two components reference different versions of the same strong-named assembly, the runtime automatically adds a binding redirection to the newer version of the assembly in the output app configuration (app.config) file. Przekierowanie przesłania ujednolicenie zestawu, które w przeciwnym razie może mieć miejsce.This redirection overrides the assembly unification that might otherwise take place. Źródłowy plik app.config nie jest modyfikowany.The source app.config file is not modified. Załóżmy na przykład, że aplikacji bezpośrednio odwołuje się do składników .NET Framework poza pasmem, ale korzysta z biblioteki innej firmy, który jest przeznaczony dla starszej wersji tego samego składnika.For example, let's say that your app directly references an out-of-band .NET Framework component but uses a third-party library that targets an older version of the same component. Podczas kompilowania aplikacji pliku konfiguracji aplikacji dane wyjściowe są modyfikowane w celu zawierają przekierowania powiązania do nowszej wersji składnika.When you compile the app, the output app configuration file is modified to contain a binding redirection to the newer version of the component. Jeśli utworzysz aplikację sieci web, pojawi się ostrzeżenie kompilacji dotyczące konflikt powiązania, który z kolei pozwala dodać przekierowanie powiązania niezbędne do źródłowego pliku konfiguracji sieci web.If you create a web app, you receive a build warning regarding the binding conflict, which in turn, gives you the option to add the necessary binding redirect to the source web configuration file.

Jeśli ręcznie Dodaj przekierowania powiązania do pliku app.config źródło w czasie kompilacji Visual Studio 2013Visual Studio 2013 próbuje ujednolicenie zestawów, w oparciu o przekierowania powiązania dodane.If you manually add binding redirects to the source app.config file, at compile time, Visual Studio 2013Visual Studio 2013 tries to unify the assemblies based on the binding redirects you added. Załóżmy na przykład, że Wstaw następujący przekierowania powiązania dla zestawu:For example, let's say you insert the following binding redirect for an assembly:

<bindingRedirect oldVersion="3.0.0.0" newVersion="2.0.0.0" />

Jeśli ten sam zestaw w wersji 1.0.0.0 odwołuje się do innego projektu w aplikacji, automatycznego przekierowania powiązań dodaje następujący wpis do pliku app.config wyjściowego tak, aby aplikacja jest unified w wersji 2.0.0.0 tego zestawu:If another project in your app references version 1.0.0.0 of the same assembly, automatic binding redirection adds the following entry to the output app.config file so that the app is unified on version 2.0.0.0 of this assembly:

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />

Można włączyć automatycznego przekierowania powiązań, jeśli aplikacja jest przeznaczony dla starszej wersji programu .NET Framework w Visual Studio 2013Visual Studio 2013.You can enable automatic binding redirection if your app targets older versions of the .NET Framework in Visual Studio 2013Visual Studio 2013. Można zastąpić to zachowanie domyślne, podając informacje o powiązaniu przekierowania w pliku app.config żadnych zestawów lub wyłączyć funkcję przekierowanie powiązania.You can override this default behavior by providing binding redirection information in the app.config file for any assembly, or turn off the binding redirection feature. Aby dowiedzieć się, jak włączyć tę funkcję, lub wyłączyć, zobacz porady: Włączanie i wyłączanie automatycznego przekierowania powiązania.For information about how to turn this feature on or off, see How to: Enable and Disable Automatic Binding Redirection.

Pomijanie zasad wydawcyBypassing publisher policy

Można zastąpić zasad wydawcy w pliku konfiguracji aplikacji, jeśli to konieczne.You can override publisher policy in the app configuration file if necessary. Na przykład nowe wersje zestawy, które zgodne ze starszymi wersjami mogą nadal być dzielone aplikacji.For example, new versions of assemblies that claim to be backward compatible can still break an app. Jeśli chcesz pominąć zasad wydawcy, Dodaj <publisherPolicy > elementu <dependentAssembly > element w pliku konfiguracji aplikacji i zestaw zastosować atrybutu nie, co zastępuje wszelkie poprzednie tak ustawienia.If you want to bypass publisher policy, add a <publisherPolicy> element to the <dependentAssembly> element in the app configuration file, and set the apply attribute to no, which overrides any previous yes settings.

<publisherPolicy apply="no" />

Obejście zasad wydawcy, aby zapewnić działanie aplikacji dla użytkowników, ale upewnij się, że zgłosić problem z dostawcą zestawu.Bypass publisher policy to keep your app running for your users, but make sure you report the problem to the assembly vendor. Jeśli zestaw ma pliku zasad wydawcy, dostawcy upewnij się, że zestaw jest zgodne z poprzednimi wersjami i że klienci mogą używać nowej wersji, jak to możliwe.If an assembly has a publisher policy file, the vendor should make sure that the assembly is backward compatible and that clients can use the new version as much as possible.

Przekierowywanie wersji zestawu na poziomie komputeraRedirecting assembly versions at the machine level

Czasami mogą wystąpić, gdy administrator maszyny oczekuje, że wszystkie aplikacje na komputerze do określonej wersji zestawu.There might be rare cases when a machine administrator wants all apps on a computer to use a specific version of an assembly. Na przykład administrator może być każdej aplikacji przy użyciu wersji określonego zestawu, ponieważ ta wersja poprawki luka w zabezpieczeniach.For example, the administrator might want every app to use a particular assembly version, because that version fixes a security hole. Jeśli zestaw jest przekierowanie w pliku konfiguracji komputera, wszystkie korzystających na tej maszynie starej wersji zostanie przekierowany do nowej wersji.If an assembly is redirected in the machine's configuration file, all apps on that machine that use the old version will be directed to use the new version. Plik konfiguracji maszyny przesłania pliku konfiguracji aplikacji i pliku zasad wydawcy.The machine configuration file overrides the app configuration file and the publisher policy file. Ten plik znajduje się w folderze %ścieżka instalacji środowiska uruchomieniowego%\Config katalogu.This file is located in the %runtime install path%\Config directory. Zazwyczaj program .NET Framework jest instalowany w katalogu %drive%\Windows\Microsoft.NET\Framework.Typically, the .NET Framework is installed in the %drive%\Windows\Microsoft.NET\Framework directory.

Określanie powiązania w plikach konfiguracji zestawówSpecifying assembly binding in configuration files

Używasz tego samego formatu XML do określenia przekierowania powiązania, czy znajduje się w pliku konfiguracji aplikacji, pliku konfiguracji komputera lub pliku zasad wydawcy.You use the same XML format to specify binding redirects whether it’s in the app configuration file, the machine configuration file, or the publisher policy file. Aby przekierować jednej wersji zestawu do innego, należy użyć <bindingRedirect > elementu.To redirect one assembly version to another, use the <bindingRedirect> element. OldVersion atrybutu można określić wersji zestawu jednej lub zakres wersji.The oldVersion attribute can specify a single assembly version or a range of versions. newVersion Atrybut powinien określać jednej wersji.The newVersion attribute should specify a single version. Na przykład <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/> Określa, że środowisko wykonawcze należy używać wersji 2.0.0.0 zamiast wersji zestawu między 1.1.0.0 i 1.2.0.0.For example, <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/> specifies that the runtime should use version 2.0.0.0 instead of the assembly versions between 1.1.0.0 and 1.2.0.0.

Poniższy przykład kodu pokazuje różnych scenariuszy przekierowania powiązania.The following code example demonstrates a variety of binding redirect scenarios. W przykładzie określono przekierowanie dla zakresu wersji dla myAssemblyi przekierowania jednego powiązania dla mySecondAssembly.The example specifies a redirect for a range of versions for myAssembly, and a single binding redirect for mySecondAssembly. W przykładzie określa również tego pliku zasad wydawcy nie spowoduje zastąpienia przekierowania powiązania dla myThirdAssembly.The example also specifies that publisher policy file will not override the binding redirects for myThirdAssembly.

Aby powiązać zestawu, należy określić ciąg "urn: schemas-microsoft-com:asm.v1" z xmlns atrybutu w <assemblybinding — > tagu.To bind an assembly, you must specify the string "urn:schemas-microsoft-com:asm.v1" with the xmlns attribute in the <assemblyBinding> tag.

<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 app,   
          publisher policy, or machine configuration files. -->  
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />  
      </dependentAssembly>  
  <dependentAssembly>  
        <assemblyIdentity name="mySecondAssembly"  
          publicKeyToken="32ab4ba45e0a69a1"  
          culture="en-us" />  
             <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />  
      </dependentAssembly>  
      <dependentAssembly>  
      <assemblyIdentity name="myThirdAssembly"  
        publicKeyToken="32ab4ba45e0a69a1"  
        culture="en-us" />  
        <!-- Publisher policy can be set only in the app   
          configuration file. -->  
        <publisherPolicy apply="no" />  
      </dependentAssembly>  
    </assemblyBinding>  
  </runtime>  
</configuration>  

Ograniczanie powiązań zestawów do określonej wersjiLimiting assembly bindings to a specific version

Można użyć appliesTo atrybutu <assemblybinding — > w pliku konfiguracji aplikacji do przekierowania powiązania odwołania do zestawów do określonej wersji programu .NET Struktura.You can use the appliesTo attribute on the <assemblyBinding> element in an app configuration file to redirect assembly binding references to a specific version of the .NET Framework. Ten opcjonalny atrybut używa numeru wersji .NET Framework w celu wskazania dotyczy wersji.This optional attribute uses a .NET Framework version number to indicate what version it applies to. Jeśli nie appliesTo określono atrybut <assemblybinding — > element ma zastosowanie do wszystkich wersji platformy .NET Framework.If no appliesTo attribute is specified, the <assemblyBinding> element applies to all versions of the .NET Framework.

Na przykład aby przekierować zestawu powiązania dla zestawu .NET Framework 3.5, można dołączyć następujący kod XML w pliku konfiguracyjnym aplikacji.For example, to redirect assembly binding for a .NET Framework 3.5 assembly, you would include the following XML code in your app configuration file.

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

Wprowadź informacje o przekierowania w kolejności wersji.You should enter redirection information in version order. Na przykład wprowadź informacje przekierowania powiązania zestawu dla zestawów platformy .NET Framework 3.5, następuje zestawów platformy .NET Framework 4.5.For example, enter assembly binding redirection information for .NET Framework 3.5 assemblies followed by .NET Framework 4.5 assemblies. Na koniec wprowadź informacje dotyczące przekierowania powiązania zestawu dla przekierowania zestawu .NET Framework, które nie są używane appliesTo atrybut i dlatego ma zastosowanie do wszystkich wersji platformy .NET Framework.Finally, enter assembly binding redirection information for any .NET Framework assembly redirection that does not use the appliesTo attribute and therefore applies to all versions of the .NET Framework. Jeśli występuje konflikt podczas przekierowywania, pierwsza instrukcja pasującego przekierowania w pliku konfiguracji jest używany.If there is a conflict in redirection, the first matching redirection statement in the configuration file is used.

Na przykład aby przekierować jedno odwołanie do zestawu .NET Framework 3.5 i inne odwołanie do zestawu .NET Framework 4, należy użyć wzorzec pokazano w poniższych pseudocode.For example, to redirect one reference to a .NET Framework 3.5 assembly and another reference to a .NET Framework 4 assembly, use the pattern shown in the following pseudocode.

<assemblyBinding xmlns="..." appliesTo="v3.5 ">   
  <!—.NET Framework version 3.5 redirects here -->   
</assemblyBinding>   

<assemblyBinding xmlns="..." appliesTo="v4.0.30319">   
  <!—.NET Framework version 4.0 redirects here -->   
</assemblyBinding>   

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

Zobacz teżSee Also

Instrukcje: włączanie i wyłączanie automatycznego przekierowania powiązańHow to: Enable and Disable Automatic Binding Redirection
<w parametrze bindingRedirect > — Element<bindingRedirect> Element
Uprawnienia zabezpieczeń przekierowania powiązania zestawuAssembly Binding Redirection Security Permission
Zestawy w środowisku uruchomieniowym CLRAssemblies in the Common Language Runtime
Programowanie za pomocą zestawówProgramming with Assemblies
Sposoby lokalizowania zestawów przez środowisko uruchomienioweHow the Runtime Locates Assemblies
Konfigurowanie aplikacjiConfiguring Apps
Konfigurowanie aplikacji programu .NET FrameworkConfiguring .NET Framework Apps
Schemat ustawień środowiska uruchomieniowegoRuntime Settings Schema
Schemat pliku konfiguracjiConfiguration File Schema
Instrukcje: tworzenie zasad wydawcyHow to: Create a Publisher Policy