Evitați obfuscating asamblări care utilizează clase în spațiul de nume System.Xml în Dotfuscator care va provoca erori

Pagina actualizată :
Data creării paginii :

Verificarea simptomelor

Creați un proiect nou. Poate fi Windows Form sau WPF, dar aici creăm o aplicație WPF.

Scrieți cod pentru a utiliza clasele care aparțin spațiului de nume System.Xml. Aici folosim clasele de "XmlDocument" și "XmlNode" după cum urmează.

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

După ce construiți, selectați "PreEmptive Dotfuscator and Analytics" din instrumentele din meniu și lansați-l.

PreEmptive Dotfuscator and Analytics を起動

Adăugați fișierul .exe pe care l-ați creat și construiți-l.

.exe ファイルを追加

Apoi, apare următorul mesaj de eroare și compilarea nu reușește.

Acesta nu este un modul gestionat (C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\ja\System.Xml.dll). Eroare de construire.

ビルドエラー

Am încercat să aflu care a fost cauza acestei erori, dar nu am putut găsi un răspuns clar. Având în vedere că nu există informații pe site-ul în limba engleză și că calea system.xml.dll are "en", puteți ghici că este o eroare unică, alta decât mediul în limba engleză.

Soluție

Chiar dacă proiectul face referire la clientul Windows System.Xml.dll, atunci când construiți cu Dotfuscator, acesta face referire la asamblarea în Windows Phone System.Xml.dll așa că am copiat cu forța System.Xml local.dll Aș dori să evite erorile de a construi referindu-se la ea.

Deschideți referințele proiectului, faceți clic dreapta pe System.Xml și alegeți Proprietăți.

プロパティを選択

Modificați elementul din copia locală la True.

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

Când construiți în această stare, "System.Xml.dll" este de ieșire împreună cu fișierul .exe.

System.Xml.dll が出力される

Deschideți Dotfuscator și adăugați "System.Xml.dll" împreună cu asamblarea pe care doriți să o obfuscate. Acest lucru obfuscates asamblarea, astfel încât să nu se refere la DLL cadrului instalat și vede DLL-ul local.

Rețineți că proprietatea System.Xml.dll verifică modul bibliotecă. Fără această verificare, System.Xml.dll poate fi, de asemenea, obfuscated și numele claselor la care face referire se pot modifica. Desigur, dacă numele clasei se schimbă, nu veți putea porni aplicația în mod normal.

System.Xml.dll を追加

Dacă construiți în această stare, se va finaliza cu succes.

ビルド成功

Puteți fi siguri că aplicația obfuscated se lansează pe cont propriu, fără probleme.

アプリケーションを起動

Conținutul prezentat aici este o soluție într-un mod oarecum complicat, deci nu putem garanta că va fi eficient chiar și pentru ansamblurile care au fost construite în consecință. Chiar dacă construcția are succes și poate fi pornită, nu există nici o negare a posibilității ca aceasta să cadă atunci când efectuați un anumit proces, așa că vă rugăm să verificați operațiunea în mod corespunzător înainte de lansare.

Chiar dacă nu se limitează la spațiul de nume System.Xml, obfuscation este o caracteristică sensibilă de care aveți nevoie pentru a vă asigura că consistența este menținută. În special, atunci când se utilizează reflecție, I/O legate de lucruri, cum ar fi I/O fișier și interacțiunea cu API-uri externe sunt susceptibile de a fi afectate, astfel încât să fie atent.