Mengarahkan versi rakitan

Anda dapat mengalihkan referensi pengikatan waktu kompilasi ke rakitan .NET Framework, rakitan pihak ketiga, atau rakitan aplikasi Anda sendiri. Anda dapat mengalihkan aplikasi untuk menggunakan versi rakitan yang berbeda dalam beberapa cara: melalui kebijakan penayang, melalui file konfigurasi aplikasi; atau melalui file konfigurasi mesin. Artikel ini membahas cara kerja pengikatan rakitan di .NET Framework dan bagaimana hal itu dapat dikonfigurasi.

Tip

Artikel ini khusus untuk .NET Framework aplikasi. Untuk informasi tentang pemuatan rakitan di .NET 5+ (dan .NET Core), lihat Pemuatan dependensi di .NET.

Penyatuan rakitan dan pengikatan default

Pengikatan ke rakitan .NET Framework terkadang dialihkan melalui proses yang disebut penyatuan rakitan. .NET Framework terdiri dari versi runtime dan sekitar dua lusin rakitan .NET Framework yang membentuk pustaka tipe. Rakitan .NET Framework ini diperlakukan oleh runtime sebagai satu unit. Secara default, ketika sebuah aplikasi diluncurkan, semua referensi ke jenis dalam kode yang dijalankan oleh runtime diarahkan ke .NET Framework rakitan yang memiliki nomor versi yang sama dengan runtime yang dimuat dalam suatu proses. Pengalihan yang terjadi dengan model ini adalah perilaku default untuk runtime.

Misalnya, jika referensi aplikasi Anda mengetik di ruang nama System.XML dan dibangun dengan menggunakan .NET Framework 4.5, aplikasi ini berisi referensi statis ke rakitan System.XML yang dikirimkan dengan runtime versi 4.5. Jika Anda ingin mengalihkan referensi pengikatan untuk menunjuk ke rakitan System.XML yang dikirimkan dengan .NET Framework 4, Anda dapat memasukkan informasi pengalihan ke dalam file konfigurasi aplikasi. Pengalihan pengikatan dalam file konfigurasi untuk rakitan .NET Framework terpadu membatalkan penyatuan untuk rakitan tersebut.

Selain itu, Anda mungkin ingin mengalihkan pengikatan rakitan secara manual untuk rakitan pihak ketiga jika ada beberapa versi yang tersedia.

Mengalihkan versi dengan menggunakan kebijakan penayang

Vendor rakitan dapat mengarahkan aplikasi ke versi rakitan yang lebih baru dengan menyertakan file kebijakan penerbit dengan rakitan baru. File kebijakan penerbit, yang terletak di cache rakitan global, berisi pengaturan pengalihan rakitan.

Setiap versi rakitan mayor.minor memiliki file kebijakan penerbitnya sendiri. Misalnya, pengalihan dari versi 2.0.2.222 ke 2.0.3.000 dan dari versi 2.0.2.321 ke versi 2.0.3.000 keduanya masuk ke file yang sama, karena mereka terkait dengan versi 2.0. Namun, pengalihan dari versi 3.0.0.999 ke versi 4.0.0.000 masuk ke file untuk versi 3.0.999. Setiap versi utama .NET Framework memiliki file kebijakan penerbitnya sendiri.

Jika file kebijakan penayang ada untuk rakitan, runtime memeriksa file ini setelah memeriksa manifes rakitan dan file konfigurasi aplikasi. Vendor harus menggunakan file kebijakan penerbit hanya ketika rakitan baru kompatibel dengan rakitan yang dialihkan.

Anda dapat melewati kebijakan penerbit untuk aplikasi Anda dengan menentukan pengaturan dalam file konfigurasi aplikasi, seperti yang dibahas di bagian Melewati kebijakan penerbit.

Mengalihkan versi di tingkat aplikasi

Ada beberapa teknik berbeda untuk mengubah perilaku pengikatan untuk aplikasi Anda melalui file konfigurasi aplikasi: Anda dapat mengedit file secara manual, Anda dapat mengandalkan pengalihan pengikatan otomatis, atau Anda dapat menentukan perilaku pengikatan dengan melewati kebijakan penerbit.

Mengedit file konfigurasi aplikasi secara manual

Anda dapat mengedit file konfigurasi aplikasi secara manual untuk mengatasi masalah rakitan. Misalnya, jika vendor mungkin merilis versi rakitan yang lebih baru yang digunakan aplikasi Anda tanpa memberikan kebijakan penayang, karena tidak menjamin kompatibilitas mundur, Anda dapat mengarahkan aplikasi Anda untuk menggunakan versi rakitan yang lebih baru dengan menempatkan informasi pengikatan rakitan dalam file konfigurasi aplikasi Anda sebagai berikut.

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

Mengandalkan pengalihan pengikatan otomatis

Saat Anda membuat aplikasi desktop di Visual Studio yang menargetkan .NET Framework 4.5.1 atau versi yang lebih baru, aplikasi menggunakan pengalihan pengikatan otomatis. Ini berarti bahwa jika dua komponen mereferensikan versi yang berbeda dari rakitan bernama kuat yang sama, runtime secara otomatis menambahkan pengalihan pengikatan ke versi rakitan yang lebih baru dalam konfigurasi aplikasi output (app.config) file. Pengalihan ini mengesampingkan penyatuan rakitan yang mungkin terjadi. File app.config sumber tidak dimodifikasi. Misalnya, katakanlah aplikasi Anda secara langsung mereferensikan komponen .NET Framework di luar band tetapi menggunakan pustaka pihak ketiga yang menargetkan versi lama dari komponen yang sama. Saat Anda mengkompilasi aplikasi, file konfigurasi aplikasi output dimodifikasi untuk berisi pengalihan pengikatan ke versi komponen yang lebih baru. Jika Anda membuat aplikasi web, Anda menerima peringatan build mengenai konflik pengikatan, yang pada gilirannya, memberi Anda opsi untuk menambahkan pengalihan pengikatan yang diperlukan ke file konfigurasi web sumber.

Jika Anda menambahkan pengalihan pengikatan secara manual ke file app.config sumber, pada waktu kompilasi, Visual Studio mencoba menyatukan rakitan berdasarkan pengalihan pengikatan yang Anda tambahkan. Misalnya, katakanlah Anda menyisipkan pengalihan pengikatan berikut untuk rakitan:

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

Jika proyek lain di aplikasi Anda mereferensikan versi 1.0.0.0 dari rakitan yang sama, pengalihan pengikatan otomatis menambahkan entri berikut ke file app.config output sehingga aplikasi disatukan pada versi 2.0.0.0 dari rakitan ini:

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

Anda dapat mengaktifkan pengalihan pengikatan otomatis jika aplikasi menargetkan versi .NET Framework yang lebih lama. Anda dapat mengganti perilaku default ini dengan memberikan informasi pengalihan yang mengikat dalam file app.config untuk rakitan apa pun, atau dengan mematikan fitur pengalihan yang mengikat. Untuk informasi tentang cara mengaktifkan atau menonaktifkan fitur ini, lihat Cara: Mengaktifkan dan Menonaktifkan Pengalihan Pengikatan Otomatis.

Lewati kebijakan penerbit

Anda dapat mengganti kebijakan penayang dalam file konfigurasi aplikasi jika perlu. Misalnya, versi baru rakitan yang mengklaim kompatibel ke belakang masih dapat merusak aplikasi. Jika Anda ingin mengabaikan kebijakan penerbit, tambahkan elemen <publisherPolicy> ke elemen <dependentAssembly> di file konfigurasi aplikasi, dan setel terapkan atribut ke tidak, yang menggantikan setelan ya sebelumnya.

<publisherPolicy apply="no" />

Lewati kebijakan penayang agar aplikasi Anda tetap berjalan untuk pengguna, tetapi pastikan Anda melaporkan masalah tersebut ke vendor rakitan. Jika rakitan memiliki file kebijakan penerbit, vendor harus memastikan bahwa rakitan kompatibel ke belakang dan bahwa klien dapat menggunakan versi baru sebanyak mungkin.

Mengalihkan versi di tingkat mesin

Mungkin ada kasus yang jarang terjadi ketika administrator mesin ingin semua aplikasi di komputer menggunakan versi rakitan tertentu. Misalnya, versi tertentu mungkin memperbaiki lubang keamanan. Jika rakitan dialihkan dalam file konfigurasi komputer, yang disebut machine.config, semua aplikasi pada mesin yang menggunakan versi lama diarahkan untuk menggunakan versi baru. File konfigurasi mesin menimpa file konfigurasi aplikasi dan file kebijakan penayang. File machine.config ini terletak di %windir%\Microsoft.NET\Framework[version]\config\machine.config untuk komputer 32-bit, atau %windir%\Microsoft.NET\Framework64[version]\config\machine.config untuk mesin 64-bit.

Tentukan pengikatan rakitan dalam file konfigurasi

Anda menggunakan format XML yang sama untuk menentukan pengalihan pengikatan apakah itu dalam file konfigurasi aplikasi, file konfigurasi mesin, atau file kebijakan penayang. Untuk mengalihkan satu versi rakitan ke versi lainnya, gunakan elemen <bindingRedirect>. Atribut oldVersion dapat menentukan satu versi rakitan atau berbagai versi. Atribut newVersion harus menentukan satu versi. Misalnya, <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/> menentukan bahwa runtime harus menggunakan versi 2.0.0.0 alih-alih versi rakitan antara 1.1.0.0 dan 1.2.0.0.

Contoh kode berikut menunjukkan berbagai skenario pengalihan pengikatan. Contoh menentukan pengalihan untuk rentang versi untuk myAssembly, dan satu pengalihan pengikatan untuk mySecondAssembly. Contoh ini juga menentukan bahwa file kebijakan penerbit tidak akan mengambil alih pengalihan pengikatan untuk myThirdAssembly.

Untuk mengikat rakitan, Anda harus menentukan string "urn:schemas-microsoft-com:asm.v1" dengan atribut xmlns di tag <assemblyBinding>.

<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>

Membatasi pengikatan rakitan ke versi tertentu

Anda dapat menggunakan atribut appliesTo pada elemen <assemblyBinding> dalam file konfigurasi aplikasi untuk mengalihkan referensi pengikatan rakitan ke versi tertentu dari rakitan .NET Framework. Atribut opsional ini menggunakan nomor versi .NET Framework untuk menunjukkan versi yang diterapkan. Jika tidak ada atribut appliesTo yang ditentukan, elemen <assemblyBinding> berlaku untuk semua versi .NET Framework.

Misalnya, untuk mengalihkan pengikatan rakitan untuk rakitan .NET Framework 3.5, Anda akan menyertakan kode XML berikut dalam file konfigurasi aplikasi Anda.

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

Anda harus memasukkan informasi pengalihan dalam urutan versi. Misalnya, masukkan informasi pengalihan pengikatan rakitan untuk .NET Framework 3,5 rakitan diikuti dengan .NET Framework 4,5 rakitan. Terakhir, masukkan informasi pengalihan pengikatan rakitan untuk pengalihan rakitan .NET Framework apa pun yang tidak menggunakan atribut appliesTo dan karenanya berlaku untuk semua versi .NET Framework. Jika ada konflik dalam pengalihan, pernyataan pengalihan pencocokan pertama dalam file konfigurasi digunakan.

Misalnya, untuk mengalihkan satu referensi ke rakitan .NET Framework 3.5 dan referensi lain ke rakitan .NET Framework 4, gunakan pola yang ditunjukkan dalam pseudocode berikut.

<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>

Lihat juga