<p>Pour éviter cette erreur, vous pouvez soit :</p>
<ul>
<li>
<p>Charger l’assembly dynamiquement, ou</p>
</li>
<li>
<p>Signer l’assembly tierce.</p>
</li>
</ul>
<p>Vous trouverez des instructions sur la signature d’assemblies tierces dans <em><a href="https://dzone.com/articles/net-fu-zero-delay-signing-of-a">.NET-fu: Signing an Unsigned Assembly (Without Delay Signing)</a></em>.</p>
<p>Signature d’assemblies tierces</p>
<p>Le principe de base pour signer une assembly tierce est de :</p>
<ul>
<li></li>
</ul>
<p>Désassembler l’assembly à l’aide de <code>ildasm.exe</code> et sauvegarder le langage intermédiaire (IL) :</p>
<pre><code class="lang-auto">ildasm /all /out=thirdPartyLib.il thirdPartyLib.dll
</code></pre>
<ul>
<li></li>
</ul>
<p>Recompiler et signer l’assembly :</p>
<pre><code class="lang-auto">ilasm /dll /key=myKey.snk thirdPartyLib.il
</code></pre>
<p>Correction des références supplémentaires</p>
<p>Les étapes ci-dessus fonctionnent bien sauf si votre assembly tierce (<em>A.dll</em>) référence une autre bibliothèque (<em>B.dll</em>) qui doit également être signée. Vous pouvez désassembler, recompiler et signer à la fois <em>A.dll</em> et <em>B.dll</em> en utilisant les commandes ci-dessus, mais à l’exécution, le chargement de <em>B.dll</em> échouera car <em>A.dll</em> a été initialement compilée avec une référence à la version <em>non signée</em> de <em>B.dll</em>.</p>
<p>La solution à ce problème est de corriger le fichier IL généré à l’étape 1 ci-dessus. Vous devrez ajouter le jeton de clé publique de B.dll à la référence. Vous obtenez ce jeton en appelant :</p>
<pre><code class="lang-auto">sn -Tp B.dll
</code></pre>
<p>ce qui vous donnera la sortie suivante :</p>
<pre><code class="lang-auto">Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.33440
Copyright (c) Microsoft Corporation. All rights reserved.
Public key (hash algorithm: sha1):
002400000480000094000000060200000024000052534131000400000100010093d86f6656eed3
b62780466e6ba30fd15d69a3918e4bbd75d3e9ca8baa5641955c86251ce1e5a83857c7f49288eb
4a0093b20aa9c7faae5184770108d9515905ddd82222514921fa81fff2ea565ae0e98cf66d3758
cb8b22c8efd729821518a76427b7ca1c979caa2d78404da3d44592badc194d05bfdd29b9b8120c
78effe92
Public key token is a8a7ed7203d87bc9
</code></pre>
<p>La dernière ligne contient le jeton de clé publique. Vous devez ensuite rechercher dans l’IL de <em>A.dll</em> la référence à <em>B.dll</em> et ajouter le jeton comme suit :</p>
<pre><code class="lang-auto">.assembly extern /23000003/ MyAssemblyName
{
(Réponse tronquée)
</code></pre>