Evitați obfuscating asamblări care utilizează clase în spațiul de nume System.Xml în Dotfuscator care va provoca erori
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;
}
}
}
După ce construiți, selectați "PreEmptive Dotfuscator and Analytics" din instrumentele din meniu și lansați-l.
Adăugați fișierul .exe pe care l-ați creat și construiți-l.
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.
Când construiți în această stare, "System.Xml.dll" este de ieșire împreună cu fișierul .exe.
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.
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.