Eviteu ofuscar conjunts que utilitzen classes a l'espai de noms System.Xml a Dotfuscator que provocaran errors

Pàgina actualitzada :
Data de creació de la pàgina :

Comprovació dels símptomes

Crear un nou projecte. Pot ser Windows Form o WPF, però aquí estem creant una aplicació WPF.

Escriu codi per utilitzar classes que pertanyen a l'espai de noms System.Xml. Aquí utilitzem les classes de "XmlDocument" i "XmlNode" de la següent manera.

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 名前空間のクラスを使用したコード

Després de construir, seleccioneu "Dotfuscator i Analytics preventius" de les eines del menú i llanceu-lo.

PreEmptive Dotfuscator and Analytics を起動

Afegiu el fitxer .exe que heu creat i el creeu.

.exe ファイルを追加

A continuació, apareix el missatge d'error següent i la construcció falla.

Aquest no és un mòdul administrat (C:\Fitxers de programa (x86)\Conjunts de referència\Microsoft\Framework\Silverlight\v4.0\Perfil\WindowsPhone71\ja\System.Xml.dll). Error de construcció.

ビルドエラー

Vaig intentar esbrinar què estava causant aquest error, però no vaig trobar una resposta clara. Tenint en compte que no hi ha informació al lloc anglès i que el camí System.Xml.dll té "en", podeu endevinar que es tracta d'un error únic que no sigui l'entorn anglès.

Solució alternativa

Tot i que el projecte fa referència al client del Windows System.Xml.dll, quan creeu amb Dotfuscator, fa referència a l'assemblat al Windows Phone System.Xml.dll de manera que hem copiat per la mesura el System.Xml localment.dll M'agradaria evitar errors fent referència a ell.

Obriu les referències del projecte, feu clic amb el botó dret del ratolí System.Xml i trieu Propietats.

プロパティを選択

Canvia l'element de la còpia local a Cert.

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

Quan creeu en aquest estat, "System.Xml.dll" surt juntament amb el fitxer .exe.

System.Xml.dll が出力される

Obriu Dotfuscator i afegiu "System.Xml.dll" juntament amb l'assemblat que voleu ofuscar. Això ofusca el muntatge de manera que no fa referència a la DLL del marc instal·lat i veu la DLL local.

Tingueu en compte que la propietat System.Xml.dll comprova el mode biblioteca. Sense aquesta comprovació, System.Xml.dll també es pot ofuscar, i els noms de classe als quals fa referència poden canviar. Per descomptat, si el nom de la classe canvia, no podreu iniciar l'aplicació normalment.

System.Xml.dll を追加

Si es construeix en aquest estat, es completarà amb èxit.

ビルド成功

Podeu estar segur que l'aplicació ofuscada es llança per si sola sense problemes.

アプリケーションを起動

El contingut que es presenta aquí és una solució alternativa d'una manera una mica complicada, de manera que no podem garantir que sigui eficaç fins i tot per a les assemblees que s'han construït en conseqüència. Fins i tot si la construcció té èxit i es pot iniciar, no es pot negar la possibilitat que caigui en realitzar un procés específic, de manera que comproveu l'operació correctament abans de la publicació.

Fins i tot si no es limita a l'espai de noms System.Xml, l'ofuscació és una característica sensible que necessiteu per assegurar-vos que es manté la coherència. En particular, quan s'utilitza la reflexió, és probable que es vegin afectades coses relacionades amb l'E / S de fitxers, com ara l'E / S dels fitxers i la interacció amb api externes, així que aneu amb compte.