Évitez d’obscurcir les assemblys qui utilisent des classes dans l’espace de noms System.Xml dans Dotfuscator qui provoqueront des erreurs

Page mise à jour :
Date de création de la page :

Vérification des symptômes

Créez un nouveau projet. Il peut s’agir de Windows Form ou WPF, mais ici nous créons une application WPF.

Écrivez du code pour utiliser des classes appartenant à l’espace de noms System.Xml. Ici, nous utilisons les classes de « XmlDocument » et « XmlNode » comme suit.

using System.Windows;
using System.Xml;

namespace DotfuscatorTest
{
  /// <summary>MainWindow.xaml の相互作用ロジック</;summary>
  public partial class MainWindow : Window
  {
    public MainWindow()
    {
      InitializeComponent();

      XmlDocument doc = new XmlDocument();
      doc.LoadXml("<a></a>");
      XmlNode node = doc.FirstChild;
    }
  }
}

System.Xml 名前空間のクラスを使用したコード

Après la construction, sélectionnez « PreEmptive Dotfuscator and Analytics » dans les outils du menu et lancez-le.

PreEmptive Dotfuscator and Analytics を起動

Ajoutez le fichier .exe que vous avez créé et générez-le.

.exe ファイルを追加

Ensuite, le message d’erreur suivant s’affiche et la génération échoue.

Il ne s’agit pas d’un module géré (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Erreur de génération.

ビルドエラー

J’ai essayé de savoir ce qui causait cette erreur, mais je n’ai pas pu trouver de réponse claire. Considérant qu’il n’y a pas d’informations sur le site anglais et que le chemin System.Xml.dll a « en », vous pouvez deviner qu’il s’agit d’une erreur unique autre que l’environnement anglais.

Solution de contournement

Même si le projet fait référence au client Windows System.Xml.dll, lorsque vous générez avec Dotfuscator, il fait référence à l’assembly dans Windows Phone System.Xml.dll nous avons donc copié de force le System.Xml localement.dll J’aimerais éviter les erreurs de construction en m’y référant.

Ouvrez les références du projet, cliquez avec le bouton droit sur System.Xml, puis choisissez Propriétés.

プロパティを選択

Remplacez l’élément de la copie locale par True.

ローカル コピーの項目を True に変更

Lorsque vous générez dans cet état, « System.Xml.dll » est généré avec le fichier .exe.

System.Xml.dll が出力される

Ouvrez Dotfuscator et ajoutez « System.Xml.dll » avec l’assembly que vous souhaitez masquer. Cela obscurcit l’assembly afin qu’il ne fasse pas référence à la DLL de l’infrastructure installée et voit la DLL locale.

Notez que la propriété System.Xml.dll vérifie le mode Bibliothèque. Sans cette vérification, System.Xml.dll peut également être masqué et les noms de classe auxquels il fait référence peuvent changer. Bien sûr, si le nom de la classe change, vous ne pourrez pas démarrer l’application normalement.

System.Xml.dll を追加

Si vous générez dans cet état, il se terminera avec succès.

ビルド成功

Vous pouvez être sûr que l’application obscurcie se lance d’elle-même sans problème.

アプリケーションを起動

Le contenu présenté ici est une solution de contournement d’une manière quelque peu délicate, nous ne pouvons donc pas garantir qu’il sera efficace même pour les assemblages qui ont été construits en conséquence. Même si la génération réussit et peut être démarrée, il est indéniable qu’elle tombe lors de l’exécution d’un processus spécifique, veuillez donc vérifier correctement l’opération avant la publication.

Même si elle n’est pas limitée à l’espace de noms System.Xml, l’obscurcissement est une fonctionnalité sensible dont vous avez besoin pour vous assurer que la cohérence est maintenue. En particulier, lors de l’utilisation de la réflexion, les éléments liés aux E/S tels que les E/S de fichiers et l’interaction avec les API externes sont susceptibles d’être affectés, alors soyez prudent.